Hive ALTER命令删除数值超过24个月的分区。

问题描述 投票:0回答:1

我有一个hive表(consumer_data),里面有 分区柱 'val_dt' 这是个 绳子 列,其值在 日期格式 'yyy-MM'.

我在表中有多个分区,从'2015-01'到'2020-04'。每个月的数据都会递增地添加到表中,所以下一个添加的分区将是'2020-05'。

我想 撤销分区 那是 24个月以上. 这个分区删除是每个月进行一次,只保留最近24个月的数据。

如何使用ALTER命令来删除那些值超过24个月的分区。

我通过linux shell运行了下面的beeline查询,但它删除了所有的分区。

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
hive hiveql
1个回答
1
投票

你不需要 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')')"
© www.soinside.com 2019 - 2024. All rights reserved.