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

标签 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命令,但出现以下错误:

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文件中,而不在单个分区文件中。

注意:该表存储为EXTERNAL。

最佳答案

您可以轻松更改列类型:

使用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

关于sql - 是否可以更改Hive中分区表上的列的元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58333567/

相关文章:

hadoop - 权威指南 - 为什么 hdfs 中的 block 这么大

sql - Azure 逻辑应用 - 将 SQL 表发送到单个电子邮件 - 操作方法

sql - 左外连接+右外连接是否与全外连接相同?

sql - 将SQL查询转换为Pig查询

hadoop - Hive:对于通过 HiveServer2 具有超过 5000 行的表,select * from table 失败

hadoop - 同时使用 Hive 和 Impala 时出现表文件夹权限问题

hadoop - 如何在beeline命令中删除此警告:找到Hive3 namespace 警告:HADOOP_YARN_HOME无效

java - 查询多个 SQL 表中的某些列值并复制/更新到不同模式中的表

hadoop - 基于 Oozie 文件的协调器

java - 合并来自 hadoop map-reduce 的结果