hivealter命令删除值超过24个月的分区

yhxst69z  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(515)

我有一个配置单元表(consumer\u data),其中分区列“val\u dt”是一个字符串列,其值的格式为“yyyy-mm”。
表中有多个分区,从“2015-01”到“2020-04”。每个月数据都会以增量的方式添加到表中,因此添加的下一个分区将是“2020-05”。
我想删除超过24个月的分区。分区删除是每个月进行的,只保留最近24个月的数据。
如何使用alter命令来删除值超过24个月的分区。
我通过linuxshell使用示例数据运行了下面的直线查询,但它删除了所有分区。

beeline --hivevar var_drop_date="$(date -d "24 months ago" '+%Y-%m')" -e 'ALTER TABLE consumer_data DROP IF EXISTS PARTITION(val_dt <= date "${hivevar:var_drop_date}")'
Partition present before running the query:
val_dt=2016-01
val_dt=2017-01
val_dt=2019-01
val_dt=2020-01

Partitions present after running the query:
None 

Required output: 
val_dt=2019-01
val_dt=2020-01
i5desfxk

i5desfxk1#

你不需要 hivevar 使用时 -e 选项,变量可以直接替换。你也不需要额外的 date 如果分区处于 yyyy-MM 格式,只能使用shell以所需格式计算日期。也 'yyyy-MM' 应该用引号括起来,因为分区是字符串,如下所示: val_dt<='2018-05' 试试这个:

beeline -e "ALTER TABLE consumer_data DROP IF EXISTS PARTITION(val_dt <= '$(date -d "24 months ago" '+%Y-%m')')"

相关问题