如何保留配置单元外部 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')"
我需要保留给定配置单元外部的最后 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')"