创建声明:
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)
,而无需手动复制/修改文件。我有成千上万的文件,所以我应该只更改表格定义而不触及文件?
请告诉我怎么做?
答案 0 :(得分:1)
如果这是你将做的一次,我建议创建一个包含预期分区的新表,并使用动态分区将旧表中的表插入到新表中。这也可以避免在分区中保留小文件。另一个选项是创建一个新表,指向具有预期分区的旧位置,并使用以下属性
TBLPROPERTIES ("hive.input.dir.recursive" = "TRUE",
"hive.mapred.supports.subdirectories" = "TRUE",
"hive.supports.subdirectories" = "TRUE",
"mapred.input.dir.recursive" = "TRUE");
之后,您可以运行msck修复表来识别分区。