Hive 0.12中外部表的动态分区

时间:2014-08-14 12:53:22

标签: hadoop hive partitioning

在Hive文档中,它讨论了外部表的动态分区:https://cwiki.apache.org/confluence/display/Hive/HCatalog+DynamicPartitions

我最近升级到Hive 0.12并希望通过在DDL的位置部分提供表的根HDFS位置来使用动态外部表分区,然后添加子目录,然后将自动添加到表。子目录将由Flume代理创建,该代理将日期添加为路径名。我希望Hive表位于根目录之上,以便能够自动在子目录中获取新数据。

例如,如果根位置是:

hdfs:///partitionTest

我使用路径

在Flume中添加数据
hdfs:///partitionTest/year=%Y/month=%m/day=%d

我的Hive DDL声明在哪里:

create external table partitionTest (line String)  
partitioned by (year int, month int, day int) 
stored as sequencefile 
location 'hdfs:///partitionTest';

我仍然发现自己必须使用alter table语句手动添加分区,或者从包含相关分区字段的另一个表中将数据插入此表 - 这会将数据写入HDFS上正确的目录结构。

我认为Hive 0.12允许我将数据写入HDFS然后会自动将其添加到表格中,这是错误的吗?我是否总是需要手动为Hive添加分区以获取新数据?

2 个答案:

答案 0 :(得分:0)

如果您的表是外部的,并且它是静态分区,则是每次创建新分区时必须添加分区(使用alter命令)。

如果是内部表,并且它是静态分区,则必须使用LOAD命令或使用insert into命令。

如果是动态分区,则select查询中的最后一列将是分区值。 Till Hive 0.13这是程序。

希望它有帮助...... !!!

答案 1 :(得分:0)

如果手动添加分区外/不通过hive命令,请运行repair table命令以获取分区。看看这是否成功

MSCK REPAIR TABLE table_name; 要么 ALTER TABLE table_name RECOVER PARTITIONS;