[英]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.