这是我之前提出的问题的延伸:是否可以更改 HIVE 中的分区元数据?
我们正在探索更改表上的元数据的想法,而不是对 SELECT 语句中的数据执行 CAST 操作。更改 MySQL 元存储中的元数据非常简单。但是,是否可以将该元数据更改应用于分区表上的列(每天都会发生)?注意:该列本身不是分区列。这是一个简单的 ID 字段,已从 STRING 更改为 BIGINT。
否则,我们可能会陷入当前和未来数据为 BIGINT 类型而历史数据为 STRING 类型的困境。
问题:是否可以更改 Hive 中的分区元数据?如果是,怎么办?
注意:我将此作为一个单独的问题提出,因为原始答案似乎是针对分区表上的列,该列也是分区列。所以,我不想把水搅浑。
Update:
我跑了ALTER TABLE .. CHANGE COLUMN ... CASCADE
命令,但出现以下错误:
处理语句时出错:FAILED:执行错误,返回代码
1 来自 org.apache.hadoop.hive.ql.exec.DDLTask。不允许更改
具有外部模式的 Avro 存储表的模式。考虑删除
表属性中的 avro.schema.literal 或 avro.schema.url。
元数据存储在单独的 avro 文件中。我可以确认更新的元数据位于 avro 文件中,但不在各个分区文件中。
注意:该表存储为 EXTERNAL。
您可以轻松更改列类型:
在 Hive 中使用 alter table,将类型更改为 STRING 等:
alter table table_name change column col_name col_name string cascade; --change to string
See 文档.
ALTER TABLE CHANGE COLUMN
with CASCADE
命令更改表元数据的列,并将相同的更改级联到所有分区元数据。
或者,您可以像这个答案一样重新创建表:https://stackoverflow.com/a/58299056/2700344
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)