是否可以在由AVRO模式文件定义的EXTERNAL表上更改现有列的元数据?

问题描述 投票:1回答:1

这是我问的先前问题的扩展:Is it possible to change the metadata of a column that is on a partitioned table in Hive?

问题:是否可以在由AVRO模式文件定义的EXTERNAL表上更改existing列的元数据?

我需要更改已分区并存储为EXTERNAL的表的列元数据。该列本身不是分区列。元数据存储在单独的AVRO文件中。我可以确认更新的元数据在AVRO文件中,而不在单个分区文件中。

为了更改分区文件中的元数据,我运行了ALTER TABLE TableName CHANGE COLUMN ColumnName ColumnName BIGINT CASCADE;命令,但出现以下错误:

处理语句时出错:失败:执行错误,返回代码1来自org.apache.hadoop.hive.ql.exec.DDLTask。不允许更改具有外部架构的Avro存储表的架构。考虑删除表属性中的avro.schema.literal或avro.schema.url。

我继续并成功运行了以下命令:

ALTER TABLE TableName UNSET TBLPROPERTIES ('avro.schema.url');

然后我成功运行了CHANGE COLUMN命令:

ALTER TABLE TableName CHANGE COLUMN ColumnName ColumnName BIGINT CASCADE;

当我在表上执行SELECT时,仍然出现错误,指示元存储区中的元数据与分区文件中的元数据不匹配。我通过打开分区数据文件确认了这一点。因此,看来CASCADE选项不适用于该分区。

sql hadoop hive cloudera hive-metastore
1个回答
0
投票

[似乎avro尝试为新列提供值,但没有退出并为该列提供默认值,它将解决此错误。

请参见完整的说明和示例,here

© www.soinside.com 2019 - 2024. All rights reserved.