msck 命令也就是更新hive表的元資料。當表的分割槽命令存在,而在shell中看到不表的分割槽情況的時候,說明表的元資料沒有更新,所以通msck表的操作可以更新表的元資料。
一、介紹
我們平時通常是通過alter table add partition方式增加hive的分割槽的,但有時候會通過hdfs put/cp命令往表目錄下拷貝分割槽目錄,如果目錄多,需要執行多條alter語句,非常麻煩。hive提供了乙個"recover partition"的功能。
具體語法如下:
[sql]view plain
copy
msck repair
table
table_name;
原理相當簡單,執行後,hive會檢測如果hdfs目錄下存在但表的metastore中不存在的partition元資訊,更新到metastore中。
二、測試
[sql]view plain
copy
#當前沒有partition元資訊
hive> show partitions cr_cdma_bsi_mscktest;
ok
time
taken: 0.104 seconds
#建立兩個分割槽目錄
hive> dfs -mkdir /user
/hive/warehouse/cr_cdma_bsi_mscktest/
month
=201603;
hive> dfs -mkdir /user
/hive/warehouse/cr_cdma_bsi_mscktest/
month
=201604;
#使用msck修復分割槽
hive> msck repair table
cr_cdma_bsi_mscktest;
ok
partitions not
inmetastore: cr_cdma_bsi_mscktest:
month
=201603
partitions not
inmetastore: cr_cdma_bsi_mscktest:
month
=201604
repair: added partition to
metastore cr_cdma_bsi_mscktest:
month
=201603
repair: added partition to
metastore cr_cdma_bsi_mscktest:
month
=201604
time
taken: 0.286 seconds, fetched: 2 row(s)
#再次檢視,發現已經成功更新元資訊
hive> show partitions cr_cdma_bsi_mscktest;
ok
month
=201603
month
=201604
time
taken: 0.102 seconds, fetched: 1 row(s)
相關jira:hive-874
Hive分割槽修復命令MSCK介紹與使用
我們在使用hive的時候肯定遇到過建立了一張分割槽表,然後手動 比如使用 cp 或者 mv 將分割槽資料拷貝到剛剛新建的表作為資料初始化的手段 但是對於分割槽表我們需要在hive裡面手動將剛剛初始化的資料分割槽加入到hive裡面,這樣才能供我們查詢使用,我們一般會想到使用 alter table a...
spark使用Hive表操作
之前很長一段時間是通過hiveserver操作hive表的,一旦hiveserver宕掉就無法進行操作。比如說乙個修改表分割槽的操作 val tblname hive table defdroppartitions tblname string unit 後來發現通過hivecontext可以實現同...
hive 桶表的使用
對於每乙個表或者分割槽來說,可以進一步組織成 桶 其實就是更細粒度的資料範圍。bucket是對指定列進行 hash,然後根據hash值除以桶的個數進行求餘,決定該條記錄存放在哪個桶中。公式 whichbucket hash columnvalue numberofbuckets 公式 要往哪個桶存 ...