[英]Performing Date Math on Hive Partition Columns
我的数据以标准 Hive 格式按天分区:
/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
),以便仅扫描必要的分区文件。 假设我无法更改文件分区格式,解决此问题的最佳方法是什么?
您不必使用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
,您可以使用任何日期和时间函数对其进行计算。
你不能用这个设置做的是使用MSCK REPAIR TABLE
来加载分区,但无论如何你真的不应该这样做 - 它非常缓慢和低效,而且真的只有当你有几个分区时才会这样做加载到新表中。
Theo 提出的另一种方法是使用以下语法,例如:
select ... from my_table where year||month||day between '2020630' and '20201010'
当列year
、 month
和day
的格式为字符串时,此方法有效。 跨月查询特别有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.