这是我之前提出的问题的扩展:如何比较具有不同数据类型组的两列
我们正在探索更改表上的元数据的想法,而不是对 SELECT 语句中的数据执行 CAST 操作。更改 MySQL 元数据中的元数据非常简单。但是,是否可以将元数据更改应用于分区(它们是每天的)?否则,我们可能会遇到当前和未来数据为 BIGINT 类型而历史为 STRING 的情况。
问题:是否可以更改 HIVE 中的分区元数据?如果是,如何?
这是我之前提出的问题的扩展:如何比较具有不同数据类型组的两列
我们正在探索更改表上的元数据的想法,而不是对 SELECT 语句中的数据执行 CAST 操作。更改 MySQL 元数据中的元数据非常简单。但是,是否可以将元数据更改应用于分区(它们是每天的)?否则,我们可能会遇到当前和未来数据为 BIGINT 类型而历史为 STRING 的情况。
问题:是否可以更改 HIVE 中的分区元数据?如果是,如何?
You can change partition column type using this statement:
alter table {table_name} partition column ({column_name} {column_type});
Also you can re-create table definition and change all columns types using these steps:
Make your table external, so it can be dropped without dropping the data
ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='TRUE');
Drop table (only metadata will be removed).
Create EXTERNAL table using updated DDL with types changed and with the same LOCATION.
recover partitions:
MSCK [REPAIR] TABLE tablename;
The equivalent command on Amazon Elastic MapReduce (EMR)'s version of Hive is:
ALTER TABLE tablename RECOVER PARTITIONS;
This will add Hive partitions metadata. See manual here: RECOVER PARTITIONS
ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='FALSE');
Note: All commands above should be ran in HUE, not MySQL.
您不能更改 hive 中的分区列,事实上 Hive 不支持更改分区列
您可以这样想 - Hive 通过在具有分区列值的 hdfs 中创建一个文件夹来存储数据 - 因为如果您尝试更改 hive 分区,这意味着您正在尝试更改 hive 表的整个目录结构和数据如果您已分区,则不可能 exp 这就是目录结构的样子
tab1/clientdata/2009/file2
tab1/clientdata/2010/file3
如果要更改分区列,可以执行以下步骤
在分区列中创建另一个具有所需更改的配置单元表
创建表 new_table ( A int, B String .....)
从上一个表中加载数据
插入 new_table 分区 ( B ) 从表 Prev_table 中选择 A,B