我有一个名为 table
的 Hive 表,它有两个字符串分区字段,years
和month
。现在我只想更新 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 的数量
答案 0 :(得分:1)
由于partition是文件夹结构,所以需要把所有的分区名都写出来。
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');
...
或者您可以创建一个具有相同结构但由新分区分区的新表。然后从旧表插入到新表,然后删除新表。