通过减少分区数来更改Hive表分区

时间:2017-02-09 14:41:27

标签: hive

创建声明:

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 个答案:

答案 0 :(得分:1)

如果这是你将做的一次,我建议创建一个包含预期分区的新表,并使用动态分区将旧表中的表插入到新表中。这也可以避免在分区中保留小文件。另一个选项是创建一个新表,指向具有预期分区的旧位置,并使用以下属性

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

之后,您可以运行msck修复表来识别分区。