【问题标题】:Deletion of partitions older than 30 days in hive删除 hive 中超过 30 天的分区
【发布时间】:2019-06-18 18:13:32
【问题描述】:

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

【问题讨论】:

  • 你的 hive 表是托管表还是外部表?
  • 你用什么来运行你的 hive 脚本? UNIX、ADF 等?
  • 这是托管的orc表,我已经在hql中编写了脚本。我可以使用没有问题的 linux 或 unix 脚本。你能帮帮我吗
  • 请分享你已经做过的尝试
  • 尝试了一个脚本,但它删除了所有早于当前日期的分区。我试图传递值 30 但它抛出错误 -> hive --hivevar today=$(date +"%Y-%m-%d") -e \ > 'alter table local_db.mytable drop partition (day

标签: hadoop hive hiveql


【解决方案1】:

您需要使用 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 进行测试。

【讨论】:

  • 谢谢拉梅什。我也试过CDH,它解决了我的问题。您能否解释一下 (date -d "30 days ago" +"%Y-%m-%d") 我很困惑何时使用 --hivevar、--hiveconf 和 --hiveenv
  • 带有“30 天前”的日期命令为您提供系统日期 - 30 天。请查看 hivevar/conf - stackoverflow.com/questions/12464636/…
  • 知道了。谢谢拉梅什
  • @Priyanka - 欢迎您。您可能想在此处将其标记为答案,因为该解决方案已经奏效。
猜你喜欢
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多