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

时间:2019-10-14 02:57:31

标签: sql hadoop hive cloudera hive-metastore

这是我先前提出的问题的扩展: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选项不适用于该分区。

0 个答案:

没有答案