这是我先前提出的问题的扩展:Is it possible to change the metadata of a column that is on a partitioned table in Hive?
问题:是否可以在由AVRO架构文件定义的EXTERNAL表上更改现有列的元数据?
我需要更改已分区并存储为EXTERNAL的表的列元数据。该列本身不是分区列。元数据存储在单独的AVRO文件中。我可以确认更新的元数据在AVRO文件中,而不在单个分区文件中。
为了更改分区文件中的元数据,我运行了ALTER TABLE TableName CHANGE COLUMN ColumnName ColumnName BIGINT CASCADE;
命令,但出现以下错误:
处理语句时出错:FAILED:执行错误,返回代码 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选项不适用于该分区。