web-dev-qa-db-ja.com

ハイブですべてのパーティションを一度に削除するにはどうすればよいですか?

Hiveバージョン1.1

次のようなHive外部テーブルがあります

 CREATE EXTERNAL TABLE `schedule_events`(
  `schedule_id` string COMMENT 'from deserializer',
  `service_key` string COMMENT 'from deserializer',
  `event_start_date_time` string COMMENT 'from deserializer',
  `event_id` string COMMENT 'from deserializer',
  `event_type` string COMMENT 'from deserializer',
  `transitional_key` string COMMENT 'from deserializer',
  `created_date_time` string COMMENT 'from deserializer',
  `bus_date` string COMMENT 'from deserializer')
    PARTITIONED BY (
                    `year` string,
                    `month` string,
                    `day` string)
   ROW FORMAT SERDE
   'org.Apache.hadoop.Hive.serde2.avro.AvroSerDe'
   STORED AS INPUTFORMAT
   'org.Apache.hadoop.Hive.ql.io.avro.AvroContainerInputFormat'
   OUTPUTFORMAT
   'org.Apache.hadoop.Hive.ql.io.avro.AvroContainerOutputFormat'
   LOCATION
   'hdfs://nameservice1/hadoop/raw/omega/scheduled_events'
  TBLPROPERTIES (
    'avro.schema.url'='hdfs:////hadoop/raw/omega/schema/schedule_events.avsc',
   'transient_lastDdlTime'='1505742141')

特定のパーティションを削除するには、次のようにALTERコマンドを実行します

 ALTER TABLE schedule_events DROP IF EXISTS PARTITION  (year='2016',month='06',day='01')
 Dropped the partition year=2016/month=06/day=01

 Hive> show partitions schedule_events;
 OK
 year=2017/month=09/day=01
 year=2017/month=09/day=02
 year=2017/month=09/day=03
 year=2017/month=09/day=04
 year=2017/month=09/day=05

しかし、このテーブルには多くのパーティションがあります

すべての既存のパーティションを一度に削除するにはどうすればよいですか?すべての既存のパーティションを一度に削除したいですか?それは可能ですか?

9
Surender Raja

複数のオプションがありますが、ここに1つあります:

alter table schedule_events drop if exists partition (year<>'');

ハイブ:ALTER TABLE DROP PARTITION構文を拡張して、すべてのコンパレーターを使用する

"... Hiveテーブルからパーティションを削除するには、これが機能します。
ALTER TABLE foo DROP PARTITION(ds = 'date')
...しかし、日付より前にすべてのパーティションを削除することもできます。
ALTER TABLE foo DROP PARTITION(ds <'date')このタスクは、すべてのコンパレータに対して、ALTER TABLE DROP PARTITIONを実装することです。

https://issues.Apache.org/jira/browse/Hive-2908

次のようなものを使用できます。

ALTER TABLE schedule_events drop if exists partition (year>'0');
6
Ani Menon

alter table schema_name.table_name drop partition(partition_column!= '');

0
Jitesh