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

Is it possible to change the metadata of a column that is on a partitioned table in Hive?

这是我之前提出的问题的扩展:

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

否则,我们可能会陷入 BIGINT 类型的当前和未来数据,而历史数据是 STRING。

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

注意:我将此作为一个单独的问题提出,因为原始答案似乎是针对分区 table 上的列,该列也是分区列。所以,我不想把水搅浑。

更新:

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

Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Not allowed to alter schema of Avro stored table having external schema. Consider removing avro.schema.literal or avro.schema.url from table properties.

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

注意:table 存储为 EXTERNAL。

您可以轻松更改列类型:

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

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

参见documentation

ALTER TABLE CHANGE COLUMN 使用 CASCADE 命令更改 table 元数据的列,并将相同的更改级联到所有分区元数据。

或者您可以重新创建 table,就像在这个答案中一样: