是否可以更改Hive中分区表上的列的元数据?

时间:2019-10-11 02:44:10

标签: sql hadoop hive cloudera hive-metastore

这是我先前提出的问题的扩展:Is it possible to change partition metadata in HIVE?

我们正在探索更改表上元数据的想法,而不是对SELECT语句中的数据执行CAST操作。更改MySQL Metastore中的元数据非常容易。但是,是否有可能将元数据更改应用于分区表(每天)上的列?注意:该列本身不是分区列。这是一个简单的ID字段,已从STRING更改为BIGINT。

否则,当历史记录为STRING时,我们可能会停留在当前和将来的数据类型为BIGINT的情况下。

问题:是否可以在Hive中更改分区元数据?如果是,怎么办?

注意:我想作为一个单独的问题提出这个问题,因为原始答案似乎是针对分区表中的一列,该表也是分区列。因此,我不想弄混水域。

更新

我运行了ALTER TABLE .. CHANGE COLUMN ... CASCADE命令,但出现以下错误:

  

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

元数据存储在单独的avro文件中。我可以确认更新的元数据在avro文件中,而不在单个分区文件中。

注意:该表存储为EXTERNAL。

1 个答案:

答案 0 :(得分:2)

您可以轻松更改列类型:

在Hive中使用alter table,将类型更改为STRING,等等:

alter table table_name change column col_name col_name string cascade; --change to string

请参见documentation

ALTER TABLE CHANGE COLUMNCASCADE命令更改表元数据的列,并将相同的更改级联到所有分区元数据。

或者,您可以像下面的答案一样重新创建表:https://stackoverflow.com/a/58299056/2700344