hive表有多个分区字段时如何只更新一个分区字段?

Posted

技术标签:

【中文标题】hive表有多个分区字段时如何只更新一个分区字段?【英文标题】:How to update only one partition field when the hive table has multiple partition fields? 【发布时间】:2021-07-18 03:29:50 【问题描述】:

我有一个名为 table 的 Hive 表,它有两个字符串分区字段,yearsmonth。现在我只想更新years分区而不更新month分区。

我尝试了下面的 sql 但失败了。

ALTER TABLE table PARTITION (years='2021') RENAME TO PARTITION (years='2020');

Apache calcite 记录了这一点

org.apache.calcite.runtime.CalciteContextException:Sql 1:从第 1 行第 43 列到第 1 行第 84 列:目标表分区列数 2 不等于源分区列数 1

【问题讨论】:

【参考方案1】:

由于分区是文件夹结构,所以需要提及所有分区名称。

ALTER TABLE table PARTITION (years='2021',month='1') RENAME TO PARTITION (years='2020',month='1');
ALTER TABLE table PARTITION (years='2021',month='2') RENAME TO PARTITION (years='2020',month='2');
ALTER TABLE table PARTITION (years='2021',month='3') RENAME TO PARTITION (years='2020',month='3');
...

否则您可以创建一个具有相同结构但由新分区分区的新表。然后从旧表插入新表,然后删除新表。

【讨论】:

以上是关于hive表有多个分区字段时如何只更新一个分区字段?的主要内容,如果未能解决你的问题,请参考以下文章

hive表添加字段导致历史分区查询报错

hive表新增字段后,新字段无法写入的问题 -- cascade

Hive:分区表表结构和数据复制

Hive的分区操作~~~~~~

Hive的分区操作

hive使用动态分区时如果动态分区的字段存在空值的问题