如何保留配置单元外部 table 的最后 N 个分区?

How to retain last N partitions for a hive external table?

我需要保留给定配置单元外部的最后 7 个分区和数据 table。

这可以通过 shell 脚本或配置单元 hql 脚本完成。 table 被 intgestion_date=YYYY-MM-DD

分割

找到(第 7 个分区的)截止日期的最佳方法是什么,然后我可以在删除分区 where 子句中使用它来删除比该日期早的所有内容。 因为它是一个外部 table,我将不得不更改 table 属性以在删除之前将其设置为内部然后还原它。

有不同的可能方法:删除所有超过 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 个分区:

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')"