使用Replace重命名Hive表列时遭遇分区列冲突问题求助
解决Hive分区表REPLACE COLUMNS改列名的报错问题
问题根源
你遇到的两个报错,核心原因有两个:
- SQL语句中错误地给表名、列名加了单引号,Hive的标识符(表名、列名)不需要用单引号包裹(仅当名称包含空格、特殊符号时才需要用反引号
`)。 - 对Hive
REPLACE COLUMNS的语法理解有误:分区列不属于表的普通列定义,执行替换时不需要在列列表中包含分区列。
正确的SQL语句
直接去掉多余的单引号,只写需要替换的普通列即可:
ALTER TABLE table_test REPLACE COLUMNS( col22 string, coll33 string );
报错原因详解
- 第一个报错
Partition column name 'cmd_out' conflicts with table columns:因为你给表名和列名加了单引号,导致Hive无法正确解析表结构,进而触发元数据校验时的分区列冲突提示。 - 第二个报错
Duplicate column name cmd_out in the table definition:分区列是表元数据的独立部分,已经存在于表结构中,你在替换列列表中重复写入,自然会触发重复列名的错误。
内容的提问来源于stack exchange,提问作者Jelly
相关产品推荐
相关产品推荐

