这是我问的先前问题的扩展:How to compare two columns with different data type groups
我们正在探索更改表上元数据的想法,而不是对SELECT语句中的数据执行CAST操作。更改MySQL Metastore中的元数据非常容易。但是,是否有可能将元数据更改应用于分区(它们是每天的)?否则,当历史记录为STRING时,我们可能会停留在BIGINT类型的当前和将来数据中。
问题:是否可以在HIVE中更改分区元数据?如果是,如何?
alter table {table_name} partition column ({column_name} {column_type});
此外,您可以使用以下步骤重新创建表定义并更改所有列的类型:
- 将表放置在外部,因此可以在不删除数据的情况下将其删除
ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='TRUE');
- 拖放表(仅元数据将被删除。)>] >>
使用类型已更改的更新的DDL创建EXTERNAL表
- 恢复分区:
MSCK [REPAIR] TABLE tablename;
在Amazon Elastic MapReduce(EMR)的Hive版本上的等效命令是:
ALTER TABLE tablename RECOVER PARTITIONS;
这将添加Hive分区元数据。参见手册:RECOVER PARTITIONS最后,如果需要,您可以再次使表MANAGED:
ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='FALSE');