HIVE技术问询:能否将表列设为分区列及给现有物理列建分区
Hive分区列相关问题解答
1. 能否在HIVE中创建以表内某一列作为分区列的表?
不行。Hive的分区列属于虚拟列,不需要在表的物理字段定义里重复声明。你写的语句同时把c放在了表结构和分区列中,这就触发了SemanticException [Error 10035]: Column repeated in partitioning columns错误。
正确的建表语句应该移除物理列中的c,只在分区定义里声明:
create table test (a int, b string) partitioned by (c int);
2. 如何在HIVE中为已有的物理列创建分区?
Hive不支持直接将现有物理列转为分区列,需要通过以下步骤间接实现:
- 新建一个分区表,结构和原表匹配,但把要作为分区的字段移到
partitioned by中create table test_part (a int, b string) partitioned by (c int); - 将原表数据插入新分区表,同时指定分区列的值
insert into test_part partition(c) select a, b, c from test; - 确认数据迁移无误后,可删除原表并将新表重命名为原表名(可选操作)
drop table test; alter table test_part rename to test;
内容的提问来源于stack exchange,提问作者Nayera Sakr
相关产品推荐
相关产品推荐

