删除蜂巢中超过30天的分区

时间:2017-11-19 07:29:43

标签: hadoop hive hiveql

我根据日期yyyy-mm-dd分区了Hive表。我想每天运行一个脚本,可以删除超过30天的所有分区,但在这种情况下,我不想通过日期。我希望它采用系统日期并删除超过30天的分区。

1 个答案:

答案 0 :(得分:2)

您需要使用Linux / Unix为DROP PARTITION日期设置变量,并在ALTER TABLE语句中使用它。

这是一个例子

CREATE TABLE ramesh.test
(col1 STRING, 
 col2 STRING)
PARTITIONED BY (partition_date date);

INSERT INTO TABLE ramesh.test PARTITION (partition_date='2017-10-01') VALUES ('key1', 'val1');
INSERT INTO TABLE ramesh.test PARTITION (partition_date='2017-10-02') VALUES ('key2', 'val2');
INSERT INTO TABLE ramesh.test PARTITION (partition_date='2017-11-01') VALUES ('key3', 'val3');

hive --hivevar var_drop_date="$(date -d "30 days ago" +"%Y-%m-%d")" -e 'ALTER TABLE ramesh.test DROP IF EXISTS PARTITION (partition_date <= date "${hivevar:var_drop_date}")'

这会从30天前删除2个分区,并在30天内离开。

让我知道它是否适合您。我用CDH测试了这个。