hive - 如何在 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 中也可用 :(
解决方案
有多种方法可以解决此问题。
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 文档中找到所有这些详细信息。
推荐阅读
- python - Python 脚本在 Ubuntu 服务器中崩溃,但在 raspbian 下工作
- django - 重用 Cloudfoundry 应用程序,而无需从头开始重建
- git - 文件太大,添加到 git ignore 但仍在尝试添加
- occi - 链接到 OCCI 库会生成有关 std::string 的警告
- sql-server - 并行运行 SQL 作业
- bootstrap-4 - 如何在引导程序 4 中使用响应式图像?
- multithreading - PlanningEntity 中的多线程与 ValueRangeProvider
- c++ - Qt找不到创建的目录
- c# - 匹配列表中的字符串并将匹配对象的其他属性与 LINQ 一起使用
- nestjs - Nestjs通过swagger模块招摇表单数据