J W*_*ezy 4 sql hadoop hive cloudera hive-metastore
这是我之前提出的问题的扩展:如何比较具有不同数据类型组的两列
我们正在探索更改表上的元数据的想法,而不是对 SELECT 语句中的数据执行 CAST 操作。更改 MySQL 元存储中的元数据非常简单。但是,是否有可能将元数据更改应用于分区(它们是每天的)?否则,我们可能会陷入当前和未来数据为 BIGINT 类型而历史数据为 STRING 类型的困境。
问题:是否可以更改 HIVE 中的分区元数据?如果是,怎么办?
您可以使用以下语句更改分区列类型:
alter table {table_name} partition column ({column_name} {column_type});
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下步骤重新创建表定义并更改所有列类型:
将表设置为外部表,这样就可以在不删除数据的情况下删除它
ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='TRUE');
删除表(仅删除元数据)。
使用更新的 DDL 创建 EXTERNAL 表,其中类型已更改且位置相同。
恢复分区:
MSCK [REPAIR] TABLE tablename;
Amazon Elastic MapReduce (EMR) 版本的 Hive 上的等效命令是:
ALTER TABLE tablename RECOVER PARTITIONS;
Run Code Online (Sandbox Code Playgroud)
这将添加 Hive 分区元数据。请参阅此处的手册:恢复分区
ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='FALSE');
注意:以上所有命令都应在 HUE 中运行,而不是在 MySQL 中运行。