簡體   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