如何在Hive 0.13中使用ALTER TABLE CHANGE CALLN CASCADE

时间:2019-02-11 23:18:31

标签: hive hiveql

请参阅ALTER TABLE CHANGE COLUMN文档here,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中使用((

1 个答案:

答案 0 :(得分:0)

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

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 Documentation中找到所有这些详细信息。