HIVE常用命令之MSCK REPAIR TABLE


MSCK REPAIR TABLE命令主要是用來解決通過hdfs dfs -put或者hdfs api寫入hive分區表的數據在hive中無法被查詢到的問題。
我們知道hive有個服務叫metastore,這個服務主要是存儲一些元數據信息,比如數據庫名,表名或者表的分區等等信息。如果不是通過hive的insert等插入語句,很多分區信息在metastore中是沒有的,如果插入分區數據量很多的話,你用 ALTER TABLE table_name ADD PARTITION 一個個分區添加十分麻煩。這時候MSCK REPAIR TABLE就派上用場了。只需要運行MSCK REPAIR TABLE命令,hive就會去檢測這個表在hdfs上的文件,把沒有寫入metastore的分區信息寫入metastore。

測試一下:

第一步:

CREATE TABLE  test (name STRING) PARTITIONED BY (DT STRING);
INSERT INTO TABLE test PARTITION(dt="20191206") VALUES ("zhang");
SHOW PARTITIONS test;

 

 

第二步:

echo "wang" > test.txt
hadoop  fs  -mkdir -p hdfs://bigdata:8020/user/hive/warehouse/sdata.db/test/dt=20191205
hadoop  fs -put -f test.txt hdfs://bigdata:8020/user/hive/warehouse/sdata.db/test/dt=20191205/
hadoop fs -ls -R hdfs://bigdata:8020/user/hive/warehouse/sdata.db/test

這個時候,我們在查看分區:

 

 

 依舊還是一個分區在,查詢表的數據,還是一樣的的。

在Hive中執行:

msck repair table test

結果顯示:

 

 

select * from test;

 

 看來是可以的。增加新分區到表中。

 

然后,如果我刪除20191205的分區在hdfs上:

hadoop  fs  -rm -r  hdfs://bigdata:8020/user/hive/warehouse/sdata.db/test/dt=20191205
執行:
MSCK REPAIR TABLE TEST
SHOW PARTITIONS TEST

查看分區還是有 20191205 20191206兩天的分區,但是表里的數據只有一天的了。看來,這個命令只能獲取新增的分區信息,針對於刪除的分區,無法及時更新。

問題:

分區數據沒有,但是分區存在,尚未解決。無法統一。

 

--眼睛太疼了,難受的不行。。。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM