web-dev-qa-db-ja.com

Impala / Hiveで複数のパーティションを削除する

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原因:例外:構文エラー

パーティション列はbigintタイプであり、1つのパーティションのみを削除するクエリは期待どおりに機能します。

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

2-最初にhdfsデータを削除してから、Impala/Hiveのパーティションを削除することをお勧めしますか、それともその逆ですか?

5
k_mishap

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.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