[英]How to update partition metadata in Hive , when partition data is manualy deleted from HDFS
自動更新Hive分區表的元數據的方法是什么?
如果將新分區數據添加到HDFS(沒有alter table add partition命令執行)。 然后我們可以通過執行命令'msck repair'來同步元數據。
如果從HDFS中刪除了大量分區數據(沒有執行alter table drop partition commad執行),該怎么辦?
同步Hive metatdata的方法是什么?
編輯 :從Hive 3.0.0開始 MSCK
現在可以使用以下語法發現新分區或刪除丟失的分區(或兩者):
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS]
這是在HIVE-17824中實施的
正如HakkiBuyukcengiz正確陳述的那樣 ,如果HDFS上的相應文件夾被手動刪除, MSCK REPAIR
不會刪除分區,只有在創建新文件夾時才會添加分區。
從官方文檔中提取:
換句話說,它將添加HDFS上存在但不在Metastore中的任何分區到Metastore。
如果在HDFS上手動刪除多個分區文件夾並且我想快速刷新分區,這就是我通常在external
表存在時所做的事情:
DROP TABLE table_name
)(刪除外部表不會刪除底層分區文件) CREATE EXTERNAL TABLE table_name ...
) MSCK REPAIR TABLE table_name
) 根據分區數量,這可能需要很長時間。 另一個解決方案是對每個已刪除的分區文件夾使用ALTER TABLE DROP PARTITION (...)
,但如果刪除了多個分區,這可能會很繁瑣。
嘗試使用
MSCK REPAIR TABLE <tablename>;
確保將表設置為external,刪除所有分區,然后運行表修復:
alter table mytable_name set TBLPROPERTIES('EXTERNAL'='TRUE')
alter table mytable_name drop if exists partition (`mypart_name` <> 'null');
msck repair table mytable_name;
如果msck修復拋出錯誤,則從終端運行配置單元:
hive --hiveconf hive.msck.path.validation=ignore
或者set hive.msck.path.validation=ignore;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.