我有一个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
你不需要 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')')"