hive 表結構及數據的複製

非分區表

複製表結構

create table new_table like exists_table;

複製表結構和數據

create table new_table as select * from exists_table;

分區表

複製表結構

create table new_table like exists_table;

複製數據稍微麻煩點,使用hdfs拷貝文件,然後再修復表數據。

首先,hadoop fs - cp 命令將exists_table舊錶的數據拷貝到new_table新表

hadoop fs -cp /user/warehouse/test.db/exists_table/* /user/warehouse/test.db/new_table/

然後執行MSCK REPAIR TABLE new_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

但是用hdfs dfs -rmr刪除hive分區表的hdfs文件會出現問題,hdfs上的文件雖然刪除了,但是hive metastore中的元數據信息沒有刪除,在查詢全表等操作時會報錯,使用show parttions table_name這些分區信息還在,說明MSCK REPAIR TABLE這個命W無法刪除已經不存在hdfs上的表分區信息,hive 2.4.0以後的版本增加了清理metastore中已經不在hdfs上的分區信息這個功能。目前的版本只能手動清除分區信息嘍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章