我有一个外部表,现在我想给它添加分区。我有224个独特的城市身份证,我只想写 alter table my_table add partition (cityid) location /path;
但是hive抱怨说,我没有提供任何关于城市id值的信息,应该是例如。 alter table my_table add partition (cityid=VALUE) location /path;
,但我不想跑 alter table
城市id的每一个值的命令,我如何能一次完成所有id的命令?
这是配置单元命令行的外观:
hive> alter table pavel.browserdata add partition (cityid) location '/user/maria_dev/data/cityidPartition';
失败:validationfailuresemanticexception表未分区,但存在分区规范:{cityid=null}
1条答案
按热度按时间osh3o9ms1#
物理层上的分区是一个位置(每个值的单独位置,通常如下所示
key=value
)数据文件。如果已经有了带有文件的分区目录结构,那么只需在hivemetastore中创建分区,就可以使用将表指向根目录ALTER TABLE SET LOCATION
,然后使用MSCK REPAIR TABLE
命令。amazon elastic mapreduce(emr)版本的hive上的等效命令是:ALTER TABLE table_name RECOVER PARTITIONS
. 这将添加配置单元分区元数据。请参阅此处的手册:恢复分区如果您的表位置中只有未分区的数据,则添加分区将不起作用,因为需要重新加载数据,您需要:
创建另一个分区表并使用
insert overwrite
要使用动态分区加载加载分区数据,请执行以下操作:这是一种非常有效的重新组织数据的方法。
在此之后,可以删除源表并重命名目标表。