Pri*_*nka 1 hadoop hive hiveql
我根据日期 yyyy-mm-dd 对 Hive 表进行了分区。我想每天运行一个脚本来删除所有超过 30 天的分区,但在这种情况下我不想传递日期。我希望它采用系统日期并删除超过 30 天的分区。
您需要使用 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');
Run Code Online (Sandbox Code Playgroud)
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}")'
Run Code Online (Sandbox Code Playgroud)
这将删除 30 天前的 2 个分区,并在 30 天内保留一个分区。
让我知道它是否适合你。我使用 CDH 来测试这个。
归档时间: |
|
查看次数: |
3708 次 |
最近记录: |