在 Impala/Hive 中删除多个分区

Posted

技术标签:

【中文标题】在 Impala/Hive 中删除多个分区【英文标题】:Dropping multiple partitions in Impala/Hive 【发布时间】:2017-08-07 09:18:41 【问题描述】:

1- 我试图一次删除多个分区,但使用 Impala 或 Hive 都很难做到。我尝试了以下查询,有无'

ALTER TABLE cz_prd_corrti_st.s1mme_transstats_info DROP IF EXISTS PARTITION (pr_load_time='20170701000317') PARTITION (pr_load_time='20170701000831')

我得到的错误如下:

分析异常: 第 3 行中的语法错误:PARTITION (pr_load_time='20170701000831') ^ 遇到:PARTITION 预期:CACHED、LOCATION、PURGE、SET、 未缓存原因:异常:语法错误

分区列是bigint类型,只删除一个分区的查询按预期工作:

ALTER TABLE cz_prd_corrti_st.s1mme_transstats_info DROP IF EXISTS
PARTITION   (pr_load_time='20170701000317')

2- 最好先删除 hdfs 数据,然后在 Impala/Hive 中删除分区,还是反之亦然?

【问题讨论】:

【参考方案1】:

1.

您的语法错误。 在 DROP 命令中,分区应该用逗号分隔。

演示

hive> create table t (i int) partitioned by (p int);
OK

hive> alter table t add partition (p=1) partition(p=2) partition(p=3) partition(p=4) partition(p=5);
OK

hive> show partitions t;
OK
partition
p=1
p=2
p=3
p=4
p=5

hive> alter table t drop if exists partition (p=1),partition (p=2),partition(p=3);
Dropped the partition p=1
Dropped the partition p=2
Dropped the partition p=3
OK

hive> show partitions t;
OK
partition
p=4
p=5

2.

你可以删除一个范围。

演示

hive> create table t (i int) partitioned by (p int);
OK

hive> alter table t add partition (p=1) partition(p=2) partition(p=3) partition(p=4) partition(p=5);
OK

hive> show partitions t;
OK
partition
p=1
p=2
p=3
p=4
p=5

hive> alter table t drop if exists partition (p<=3);
Dropped the partition p=1
Dropped the partition p=2
Dropped the partition p=3
OK

hive> show partitions t;
OK
partition
p=4
p=5

【讨论】:

您确实是正确的,Hive 使用上述语法。尚未找到 Impala 的解决方案。 不幸的是,分区谓词 (partition (p&lt;=3)) 中的比较器在 Spark SQL 中不起作用,请参阅issues.apache.org/jira/browse/SPARK-14922 第二个演示适用于 Impala 2.8+。请参阅impala.apache.org/docs/build/html/topics/…,其中说“在 Impala 2.8 及更高版本中,具有 DROP 或 SET 操作的分区子句的表达式可以包括比较运算符,如

以上是关于在 Impala/Hive 中删除多个分区的主要内容,如果未能解决你的问题,请参考以下文章

如何跨多个模式从表中删除分区?

在 IMPALA/HIVE 中添加带有 SELECT 的新列后,旧表数据变为 NULL

如何摆脱 Hive/Impala 中的重复计数

如何在没有 ClassNotFound 异常的情况下在 Apache Tomcat 中配置 Impala/Hive2 JDBC 驱动程序

计算 json 对象中键的出现次数 - IMPALA/HIVE

在cm安装的大数据管理平台中集成impala之后读取hive表中的数据的设置(hue当中执行impala的数据查询)