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行中的语法错误:PARTITION(pr_load_time =‘20170701000831’)^遇到:PARTITION预期的:CACHED,LOCATION,PURGE,SET,UNCACHED原因:异常:语法错误
partition列为bigint类型,查询仅删除一个分区即可正常工作:
ALTER TABLE cz_prd_corrti_st.s1mme_transstats_info DROP IF EXISTS PARTITION (pr_load_time='20170701000317')
2-是一种好习惯,首先删除hdfs数据,然后将分区放在Impala / Hive中,还是应该相反?
您的语法错误。 在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
您可以放下范围。
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