2017-02-09 76 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修表识别的分区。