hive - hive表有多个分区字段时如何只更新一个分区字段?
问题描述
我有一个名为 的 Hive 表table
,它有两个字符串分区字段,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
解决方案
由于分区是文件夹结构,因此您需要提及所有分区名称。
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');
...
否则,您可以创建一个具有相同结构但由新分区分区的新表。然后从旧表插入新表,然后删除新表。
推荐阅读
- matlab - 如何在Matlab排除那些规则圆形瓶子的同时检测红色圆圈中不规则放置的瓶子?
- c# - 为什么 System.Text.Json.JsonElement 没有 TryGetString() 或 TryGetBoolean()
- c++ - 我可以初始化 const 实例以便我可以将它用作 const 来初始化数组吗?
- python - 沿特定轴的 Numpy 点积
- azure-devops - 用于扩展模板的 Azure 管道 stageList 参数
- r - 如何按所有列的中位数对数据框列进行排序
- python - Python 上的 Gauss-Newton 错误计算
- laravel - Laravel:如果我需要从其他站点获取数据,我应该创建一个路由获取还是发布?
- javascript - Javascript轮播有效,但不是我想要的
- c++ - 避免运算符第一个参数上的浮点数和非浮点数的模板运算符重载冲突