s3 中的数据分区

Data partitioning in s3

我们在关系数据库中有我们的数据在单个 table 中,列 ID 和日期是这样的。

productid    date    value1 value2
1         2005-10-26  24    27
1         2005-10-27  22    28
2         2005-10-26  12    18

尝试将它们作为镶木地板加载到 s3 并在配置单元中创建元数据以使用 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/

或者像这样,

s3://mybucket/year=2017/month=06/day=01/
s3://mybucket/year=2017/month=06/day=02/
...
s3://mybucket/year=2017/month=08/day=31/
  1. 因为我有 7 年的数据,这在查询方面会更快。
  2. 另外,如何在此处为产品 ID 添加分区?这样它会更快。
  3. 我如何使用 spark scala 创建这个 (s3://mybucket/year=2017/month=06/day=01/) 具有 key=value 的文件夹结构。?有例子吗?

我们这样分区,

s3://bucket/year/month/year/day/hour/minute/product/region/availabilityzone/

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

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

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

希望对您有所帮助。