我的数据以标准配置单元格式按天进行分区:
/year=2020/month=10/day=01
/year=2020/month=10/day=02
/year=2020/month=10/day=03
/year=2020/month=10/day=04
...我想使用Amazon Athena (IE: Presto)查询过去60天的所有数据。我希望这个查询使用分区列(year、month、day),以便只扫描必要的分区文件。假设我不能更改文件分区格式,那么解决这个问题的最佳方法是什么?
发布于 2020-10-14 03:06:34
您不必使用year、month、day作为表的分区键。您可以拥有一个名为date的分区键,并像这样添加分区:
ALTER TABLE the_table ADD
PARTITION (`date` = '2020-10-01') LOCATION 's3://the-bucket/data/year=2020/month=10/day=01'
PARTITION (`date` = '2020-10-02') LOCATION 's3://the-bucket/data/year=2020/month=10/day=02'
...使用此设置,您甚至可以将分区键的类型设置为date
PARTITIONED BY (`date` date)现在,您有了一个表,其中的date列被类型化为DATE,您可以使用任何date and time functions对其进行计算。
使用这种设置不能做的是使用MSCK REPAIR TABLE加载分区,但无论如何都不应该这样做--它非常慢,效率很低,而且只有在有几个分区要加载到新表中时才会这样做。
发布于 2020-10-14 20:27:27
Theo提出的另一种方法是使用以下语法,例如:
select ... from my_table where year||month||day between '2020630' and '20201010' 当列year、month和day的格式为字符串时,此方法有效。这对于跨月查询特别有用。
https://stackoverflow.com/questions/64336952
复制相似问题