繁体   English   中英

对 Hive 分区列执行日期数学运算

[英]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 天的所有数据。 我希望此查询使用分区列( yearmonthday ),以便仅扫描必要的分区文件。 假设我无法更改文件分区格式,解决此问题的最佳方法是什么?

您不必使用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' 

当列yearmonthday的格式为字符串时,此方法有效。 跨月查询特别有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM