首页 > 解决方案 > 如何在 Hive 0.13 中使用 ALTER TABLE CHANGE COLUMN CASCADE

问题描述

在此处参考 ALTER TABLE CHANGE COLUMN 文档,PARTITION 子句在 Hive 0.14 中可用,而 CASCADE 在 Hive 1.1.0 中可用

是否可以更新 Hive 0.13 中所有分区的列类型?如果 PARTITION 或 CASCADE 不可用,我正在寻找 Hive 0.13 的解决方法

我想在 Hive 0.13 上运行这个命令:

ALTER TABLE my_table CHANGE COLUMN existing_column new_column STRING
CASCADE;

但 CASCADE 不可用。我会使用 PARTITION 循环,但 PARTITION 在 0.14 中也可用 :(

标签: hivehiveql

解决方案


有多种方法可以解决此问题。

1)您的表已分区,这意味着每个现有分区也需要使用新的列类型进行更新。您可以通过设置以下属性然后运行alter语句来做到这一点。

SET hive.exec.dynamic.partition = true;
ALTER TABLE table_name PARTITION (partition_column) 
CHANGE COLUMN old_col new_col data_type;

此属性将启用动态分区,这意味着 alter 语句将更改所有分区。

2)您也可以通过一次执行 1 个分区来执行此操作,只需从脚本中传递分区键并ALTER为所有分区运行语句。在这种情况下,语句将类似于:

ALTER TABLE table_name PARTITION (partition_column='value') 
CHANGE COLUMN old_col new_col data_type;

如果您想按照 Hive 0.14+ 支持的方式进行操作,则可以从以下链接应用补丁。 https://issues.apache.org/jira/browse/HIVE-7971

您还可以在Hive 文档中找到所有这些详细信息。


推荐阅读