首页 > 解决方案 > 是否可以更改由 AVRO 模式文件定义的 EXTERNAL 表上现有列的元数据?

问题描述

这是我之前提出的问题的扩展:是否可以更改 Hive 中分区表上列的元数据?

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

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

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

处理语句时出错:FAILED:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。不允许更改具有外部架构的 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在表上执行 a 时,我仍然收到一个错误,表明元数据在元存储中的内容与分区文件中的内容不匹配。我通过打开分区数据文件确认了这一点。因此,似乎 CASCADE 选项不适用于分区。

标签: sqlhadoophiveclouderahive-metastore

解决方案


推荐阅读