是否可以更改 HIVE 中的分区元数据?

J W*_*ezy 4 sql hadoop hive cloudera hive-metastore

这是我之前提出的问题的扩展:如何比较具有不同数据类型组的两列

我们正在探索更改表上的元数据的想法,而不是对 SELECT 语句中的数据执行 CAST 操作。更改 MySQL 元存储中的元数据非常简单。但是,是否有可能将元数据更改应用于分区(它们是每天的)?否则,我们可能会陷入当前和未来数据为 BIGINT 类型而历史数据为 STRING 类型的困境。

问题:是否可以更改 HIVE 中的分区元数据?如果是,怎么办?

lef*_*oin 5

您可以使用以下语句更改分区列类型:

alter table {table_name} partition column ({column_name} {column_type});
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下步骤重新创建表定义并更改所有列类型:

  1. 将表设置为外部表,这样就可以在不删除数据的情况下删除它

    ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='TRUE');

  2. 删除表(仅删除元数据)。

  3. 使用更新的 DDL 创建 EXTERNAL 表,其中类型已更改且位置相同。

  4. 恢复分区:

    MSCK [REPAIR] TABLE tablename;

Amazon Elastic MapReduce (EMR) 版本的 Hive 上的等效命令是:

ALTER TABLE tablename RECOVER PARTITIONS;
Run Code Online (Sandbox Code Playgroud)

这将添加 Hive 分区元数据。请参阅此处的手册:恢复分区

  1. 最后,如果有必要,您可以再次对表进行管理:

ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='FALSE');

注意:以上所有命令都应在 HUE 中运行,而不是在 MySQL 中运行。

  • @JWeezy 测试了它: 1.`创建表 test_partition_col(c1 int) 分区(ts 时间戳);`2.`更改表 test_partition_col 分区列(ts 字符串)`请参见此处:https://demo.gethue.com/hue /editor?editor=52825&type=hive (2认同)