在impala/hive中删除多个分区

fdx2calv  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(1680)

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') 我得到的错误如下:
analysisexception:第3行语法错误:分区(pr\u load\u time='20170701000831')^遇到:应为分区:cached,location,purge,set,uncached,原因:exception:语法错误
分区列为bigint类型,仅删除一个分区的查询按预期工作:

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

2-先删除hdfs数据,然后在impala/hive中删除分区是一种好的做法,还是应该这样做?

epggiuax

epggiuax1#

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

相关问题