s3 中的数据分区

ds_*_*ser 5 hive scala amazon-s3 emr apache-spark

我们将关系数据库中的数据存储在单个表中,其中包含 id 和 date 列。

productid    date    value1 value2
1         2005-10-26  24    27
1         2005-10-27  22    28
2         2005-10-26  12    18
Run Code Online (Sandbox Code Playgroud)

尝试将它们作为 parquet 加载到 s3 并在 hive 中创建元数据以使用 athena 和 redshift 查询它们。我们最常见的查询是按产品 ID、日、月和年进行过滤。因此尝试以一种具有更好查询性能的方式加载数据分区。

据我了解,我可以像这样创建分区

s3://my-bucket/my-dataset/dt=2017-07-01/   
...
s3://my-bucket/my-dataset/dt=2017-07-09/   
s3://my-bucket/my-dataset/dt=2017-07-10/
Run Code Online (Sandbox Code Playgroud)

或者像这样,

s3://mybucket/year=2017/month=06/day=01/
s3://mybucket/year=2017/month=06/day=02/
...
s3://mybucket/year=2017/month=08/day=31/
Run Code Online (Sandbox Code Playgroud)
  1. 由于我有 7 年的数据,因此查询速度会更快。
  2. 另外,我如何在这里添加产品 ID 的分区?这样会更快。
  3. 我如何使用spark scala创建这个(s3://mybucket/year=2017/month=06/day=01/)文件夹结构,其中key=value。有什么例子吗?

Kan*_*yan 3

我们这样划分,

s3://存储桶/年/月/年/日/小时/分钟/产品/区域/可用区/

s3://bucketname/2018/03/01/11/30/nest/e1/e1a

分钟四舍五入为 30 分钟。如果流量很高,您可以在几分钟内使用更高的分辨率,也可以按小时甚至天减少分辨率。

它根据我们想要查询的数据(使用 Athena 或 Redshift Spectrum)以及持续时间提供了很大帮助。

希望能帮助到你。