2017-02-09 69 views
0

創建聲明:通過減少分區的數量改變蜂巢表分區

CREATE EXTERNAL TABLE tab1(usr string) 
       PARTITIONED BY (year string, month string, day string, hour string, min string) 
       ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' 
       LOCATION '/tmp/hive1'; 

數據:

select * from tab1; 

jhon,2017,2,20,10,11 
jhon,2017,2,20,10,12 
jhon,2017,2,20,10,13 

現在我需要改變tab1表只有3個分區(year string, month string, day string)無需手動複製/修改文件。我有成千上萬的文件,所以我應該只更改表格定義而不觸摸文件?

請讓我知道如何做到這一點?

回答

1

如果這是你會做一次的事情,我會建議創建一個帶有預期分區的新表,並使用動態分區將舊錶中的表插入到新表中。這也將避免在分區中保留小文件。另一種選擇是創建一個新表指向舊的位置與預期的分區和使用以下屬性

TBLPROPERTIES ("hive.input.dir.recursive" = "TRUE", 
"hive.mapred.supports.subdirectories" = "TRUE", 
"hive.supports.subdirectories" = "TRUE", 
"mapred.input.dir.recursive" = "TRUE"); 

後,您可以運行MSCK修表識別的分區。