首页 > 解决方案 > hive表有多个分区字段时如何只更新一个分区字段?

问题描述

我有一个名为 的 Hive 表table,它有两个字符串分区字段,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

标签: hivehiveql

解决方案


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

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');
...

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


推荐阅读