删除配置单元中超过30天的分区

62lalag4  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(372)

我有一个基于yyyy-mm-dd日期的配置单元表分区。我想每天运行一个脚本,可以删除所有超过30天的分区,但在这种情况下,我不想传递日期。我想它采取系统日期和删除分区超过30天。

x0fgdtte

x0fgdtte1#

您需要使用linux/unix为drop partition date设置变量,并在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来测试这个。

相关问题