[英]dropping hive partition dynamically
我有一個HIVE表,該表每天都有每日分區,如下所示(還包括將來日期的分區)
20160901
20160902
........
........
........
20160931
20161001
20161002
我想傳遞一個日期,例如昨天的日期20160922,並要動態刪除> = 20160922的所有分區(盡管今天是20160923,但我要從20160922的日期刪除)。
如何動態刪除所有這些分區。
您不能直接在配置單元中執行,因為它不支持動態sql。
可以使用shell腳本/或具有如下所示的刪除分區腳本的任何腳本創建文件來解決。
如果存在分區,則更改表partition_t drop(y = 20160922);
如果存在分區(y = 20160921),則更改表partition_t刪除;
如果存在分區(y = 20160920),則更改表partition_t刪除; ...
然后運行hive -v -f ./file.sh
如果存在分區,則更改表partition_t
在將數據插入表中之前執行以下步驟。
1)轉到該表的Hdfs文件夾,然后使用命令行管理程序刪除表目錄中的所有文件夾。 hadoop fs -rm r <>
2)運行MSCK修復表以更新有關分區的元數據。
以上兩個步驟將根據模式刪除所有可用分區。
現在插入新數據。
您可以刪除分區以提供范圍過濾器。 作為參考,請參見答案: https : //stackoverflow.com/a/48422251/3132181所以您的代碼可能像這樣:
Alter table mytable drop partition (datehour >= '20160922')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.