如果分区列名称不正确,Hive 将删除所有分区

Posted

技术标签:

【中文标题】如果分区列名称不正确,Hive 将删除所有分区【英文标题】:Hive drops all the partitions if the partition column name is not correct 【发布时间】:2015-08-19 10:38:37 【问题描述】:

我遇到了一个奇怪的蜂巢问题, 我有一个表,根据 dept_key 分区(它是一个整数,例如 3212) 表创建如下

create external table dept_details (dept_key,dept_name,dept_location) PARTITIONED BY (dept_key_partition INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '~' LOCATION '/dept_details/dept/';

现在我已经添加了一些分区,例如:1204,1203,1204 当我尝试删除分区时,我错误地只输入了dept_key 而不是"dept_key_partition",这反过来又删除了我的所有分区 删除查询alter table dept_details drop partition (dept_key=12),这是我面临的一个非常奇怪的问题。请让我知道可能是什么问题。 谢谢。

【问题讨论】:

请显示您使用的整个删除分区语句。 【参考方案1】:

来自Hive LanguageManual DDL...

从 Hive 0.14 (HIVE-8411) 开始,用户可以提供 partial 分区规范 对于某些上述更改列语句,类似于 动态分区 (...) 您可以使用单个 ALTER 语句(...) 一次更改 多个现有分区 (...) 类似于动态分区, hive.exec.dynamic.partition 必须设置为 true

看起来部分规范功能已被移植到其他命令,如 DROP、TRUNCATE,即使文档中没有明确说明。

简而言之:这不是错误,而是一项功能。

【讨论】:

但是如果指定其他列名它不应该删除所有分区,如果我错了,请纠正我。我现在已将 drop 查询放入问题中。 是的,确实,如果您只有 1 个分区键并且为该键指定了特定值,那么 Hive 应该只删除该分区。我不知道你的情况发生了什么。

以上是关于如果分区列名称不正确,Hive 将删除所有分区的主要内容,如果未能解决你的问题,请参考以下文章

从 hive 外部表中的分区中删除列

BigQuery 会将记录移动到正确的分区中吗?

Hive 不读取 Spark 生成的分区 parquet 文件

从 Hive 分区外部表中删除特定列

带有 hive 的 pyspark - 无法正确创建分区并从数据框中保存表

怎么判断hive表是分区表,并拿到分区列的列名