如果分区列名称不正确,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 不读取 Spark 生成的分区 parquet 文件