使用MSCK命令修復Hive表分割槽

2021-08-14 08:48:40 字數 1672 閱讀 1688

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 公式 要往哪個桶存 ...