古詩詞大全網 - 成語解釋 - Hive:分區表表結構和數據復制

Hive:分區表表結構和數據復制

摘要: Hive , Shell

Hive復制表包括兩種

對於非分區表如果要完全復制壹張表到另壹張表,直接使用CREATE TABLE ... AS語句即可,比如以下復制壹個表的兩個字段以及字段的值到另壹個表

對於分區表如果使用CREATE TABLE ... AS語句則分區失效,但是可以執行不報錯,且字段和數據都能完全復制

以上有壹張分區表,以dt字段作為分區,使用CREATE TABLE ... AS進行全表復制

檢查表結構和表數據量都沒有問題

檢查分區,報錯此表不是分區表,is not a partitioned table,但是在表結構中確實存在本來的分區字段dt,此時dt字段的分區功能失效,但是數據保留住了

分區表的全稱復制且帶有分區的操作方法需要使用 LIKE 語句復制到分區信息,具體步驟如下

第壹步復制得到壹張空表,具有原表的表結構和分區信息

下壹步使用hdfs命令操作將原表在hdfs的存儲路徑復制到新表的路徑, 壹張表的存儲路徑是壹個目錄,該目錄下還存在子目錄,每壹個子目錄代表壹個分區,在分區目錄下就是數據文件,數據文件是part開頭格式,由Hive的分桶策略將同壹分區下的數據進行劃分

復制語句采用 * 通配符將原表目錄下所有文件復制到新表路徑下,查看新表的hdfs路徑下數據文件

此時新表雖然對應數倉目錄下有數據文件,但是在Hive客戶端還是查不到數據為空表, 因為壹個個數據分區不存在在新表的元數據中,數據是以分區目錄為單位聚合的,新表目前查不到壹個分區則自然查不到數據

下壹步修復表的分區元數據,使用 MSCK REPAIR TABLE 命令

由輸出的執行過程可見MSCK REPAIR TABLE命令先檢查了表的分區信息是否存在在元數據,然後對不存在的分區信息進行修復,修復後該表即可正常使用

MSCK REPAIR TABLE 的作用是 只需要只用這壹個命令就可以 快速 , 自動化 地添加(修復)全部分區 ,在Hive中如果先建分區表,並且以數據拷貝到對應HDFS目錄這種方式作為初始化,需要手動添加分區才能使用,如果分區過多,使用 ALTER TABLE ADD PARTITION 極為不變,下面做壹下測試看ALTER TABLE ADD PARTITION是否也能完成分區表的完全復制

下壹步采用手動添加1個分區dt='20201209'

驗證了手動分區能夠完成, MSCK REPAIR TABLE只是自動化的掃描壹遍數倉目錄下的分區信息(dt='20201209' 到 dt='20210317') ,如果編寫壹個Shell腳本也能實現如下

運行這個Shell腳本後能達到同樣的效果,但是這個腳本執行了15分鐘,需要頻繁啟動和關閉Hive進程