【问题标题】:How to retain last N partitions for a hive external table?如何保留配置单元外部表的最后 N 个分区?
【发布时间】:2021-11-30 15:28:38
【问题描述】:

我需要保留给定 hive 外部表的最后 7 个分区和数据。

这可以通过一个 shell 脚本或一个 hive hql 脚本来完成。 该表按 intgestion_date=YYYY-MM-DD

分区

找到截止日期(第 7 个分区)的最佳方法是什么,然后我可以在 drop partition where 子句中使用它来删除比该日期更早的所有内容。 因为它是一个外部表,所以我必须在删除之前更改表属性以使其成为内部表,然后再恢复它。

【问题讨论】:

    标签: bash shell hive hive-partitions hiveddl


    【解决方案1】:

    有不同的可能方法:删除所有超过 7 天的分区,这很容易(shell):

    hive -e "ALTER TABLE mytable DROP IF EXISTS PARTITION(intgestion_date < '$(date -d "7 days ago" '+%Y-%m-%d')')"
    

    但这似乎不是你想要的。需要先获取第 7 个分区并在前面的语句中使用它。执行show partition,使用sort,head和tail得到第7个partition:

    seventh_partition=$(hive -e -S "show partitions table_name" | sort -r | head -n 7 | tail -n 1)
    #extract value
    part_value=${seventh_partition#*=}
    #Execute drop older than 7th partition. Replace hive -e with echo and check what it prints
    hive -e "ALTER TABLE table_name DROP IF EXISTS PARTITION(intgestion_date < '$part_value')"
    

    【讨论】:

    • 太棒了。谢谢。似乎与我计算出的 sn-p 非常接近。只有更清洁!
    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    相关资源
    最近更新 更多