请参阅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中使用((
答案 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中找到所有这些详细信息。