是否可以更改 HIVE 中的分区元数据?
Is it possible to change partition metadata in HIVE?
这是我之前提出的问题的扩展:
我们正在探索更改 table 上的元数据的想法,而不是对 SELECT 语句中的数据执行 CAST 操作。更改 MySQL 元存储中的元数据非常简单。但是,是否可以将元数据更改应用于分区(它们是每天)?否则,我们可能会陷入 BIGINT 类型的当前和未来数据,而历史数据是 STRING。
问:HIVE 中是否可以更改分区元数据?如果是,如何?
您可以使用以下语句更改分区列类型:
alter table {table_name} partition column ({column_name} {column_type});
您还可以重新创建 table 定义并使用以下步骤更改所有列类型:
将您的 table 设为外部,这样就可以在不删除数据的情况下删除它
ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='TRUE');
删除 table(仅删除元数据)。
使用更新的 DDL 创建 EXTERNAL table,类型已更改且位置相同。
恢复分区:
MSCK [REPAIR] TABLE tablename;
Amazon Elastic MapReduce (EMR) 版本的 Hive 上的等效命令是:
ALTER TABLE tablename RECOVER PARTITIONS;
这将添加 Hive 分区元数据。请在此处查看手册:RECOVER PARTITIONS
- 最后,如有必要,您可以再次 table MANAGED:
ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='FALSE');
Note: All commands above should be ran in HUE, not MySQL.
您不能更改 Hive 中的分区列实际上 Hive 不支持更改分区列
参考:altering partition column type in Hive
你可以这么想
- Hive 通过在具有分区列值的 hdfs 中创建文件夹来存储数据
- 因为如果您尝试更改配置单元分区,则意味着您正在尝试更改配置单元 table 的整个目录结构和数据,这是不可能的
exp 如果你在 year 分区,这就是目录结构的样子
tab1/clientdata/2009/file2
tab1/clientdata/2010/file3
如果要更改分区列,可以执行以下步骤
创建另一个配置单元 table 并在分区列中进行必要的更改
创建tablenew_table(A int, B String.....)
加载之前的数据table
从 table Prev_table
插入 new_table 分区 ( B ) select A,B
这是我之前提出的问题的扩展:
我们正在探索更改 table 上的元数据的想法,而不是对 SELECT 语句中的数据执行 CAST 操作。更改 MySQL 元存储中的元数据非常简单。但是,是否可以将元数据更改应用于分区(它们是每天)?否则,我们可能会陷入 BIGINT 类型的当前和未来数据,而历史数据是 STRING。
问:HIVE 中是否可以更改分区元数据?如果是,如何?
您可以使用以下语句更改分区列类型:
alter table {table_name} partition column ({column_name} {column_type});
您还可以重新创建 table 定义并使用以下步骤更改所有列类型:
将您的 table 设为外部,这样就可以在不删除数据的情况下删除它
ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='TRUE');
删除 table(仅删除元数据)。
使用更新的 DDL 创建 EXTERNAL table,类型已更改且位置相同。
恢复分区:
MSCK [REPAIR] TABLE tablename;
Amazon Elastic MapReduce (EMR) 版本的 Hive 上的等效命令是:
ALTER TABLE tablename RECOVER PARTITIONS;
这将添加 Hive 分区元数据。请在此处查看手册:RECOVER PARTITIONS
- 最后,如有必要,您可以再次 table MANAGED:
ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='FALSE');
Note: All commands above should be ran in HUE, not MySQL.
您不能更改 Hive 中的分区列实际上 Hive 不支持更改分区列
参考:altering partition column type in Hive
你可以这么想 - Hive 通过在具有分区列值的 hdfs 中创建文件夹来存储数据 - 因为如果您尝试更改配置单元分区,则意味着您正在尝试更改配置单元 table 的整个目录结构和数据,这是不可能的 exp 如果你在 year 分区,这就是目录结构的样子
tab1/clientdata/2009/file2
tab1/clientdata/2010/file3
如果要更改分区列,可以执行以下步骤
创建另一个配置单元 table 并在分区列中进行必要的更改
创建tablenew_table(A int, B String.....)
加载之前的数据table
从 table Prev_table
插入 new_table 分区 ( B ) select A,B