簡體   English   中英

在蜂巢中動態刪除分區

[英]drop partitions dynamically in hive

我在蜂巢中有兩個表,兩個表都由代表時間戳的String分區(由於我在Cloudera Impala中使用表,所以我使用字符串而不是時間戳,該表不支持按時間戳划分的表)。

這些表用於在特定時間片中存儲大量數據。 第一個表包含更高時間粒度的最新數據,假設1分鍾時間片和第二個較低粒度的舊數據,這里說1小時時間片。

因此,我有一個查詢,該查詢匯總了比1分鍾時間片的特定時間段更舊的數據,以便獲得1小時時間片的數據,並將其與1小時時間片插入表中。

創建1小時時間片后,我想刪除新1小時時間片中包含的所有1分鍾時間片。 並且由於表是由表示時間的字符串分區的,因此我可以刪除相應的分區。

並且知道我的實際問題:

是否有可能在蜂巢中以某種方式丟棄分區

 ALTER TABLE oneMinSlices DROP IF EXISTS PARTITION(time < 'YYYY-MM-DD HH:MM:SS')

在此先感謝您的幫助。

ps:如果您想知道為什么要這樣做:數據在不斷增長,並且如果我們不刪除1分鍾的時間片,包含它們的表將變得非常大,從而導致查詢速度變慢並且需要大量資源空間。

從Hive 0.9.0開始,您可以在ALTER TABLE .. DROP PARTITION語句中使用所有比較器。 這意味着您的原始陳述應該有效。 參見: https : //issues.apache.org/jira/browse/HIVE-2908

你必須為此編寫一個shell腳本。

在.hql文件中寫下面的查詢

ALTER TABLE oneMinSlices DROP IF EXISTS PARTITION(time = '${hiveconf:timestamp}')

現在動態地將分區作為命令行參數傳遞。

hive -hiveconf timestamp=2013-04-22\ 05:12:20 -f hqlfilepath.hql

最后一步是從shell動態獲取時間戳。

運行以上命令直到滿足您的條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM