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

Posted

技术标签:

【中文标题】Hive ALTER 命令删除值超过 24 个月的分区【英文标题】:Hive ALTER command to drop partition having values older than 24 months 【发布时间】:2020-05-09 05:05:07 【问题描述】:

我有一个带有 分区列 'val_dt' 的配置单元表(consumer_data),这是一个 >字符串列具有日期格式 'yyyy-MM'

我在表中有多个分区,从“2015-01”到“2020-04”。每个月都会将数据增量添加到表中,因此添加的下一个分区将是“2020-05”。

我想删除超过 24 个月的分区。此分区删除每月进行一次,仅保留最近 24 个月的数据。

如何设置 ALTER 命令以删除值超过 24 个月的分区。

我通过 linux shell 使用示例数据运行了以下直线查询,但它删除了所有分区。

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

【问题讨论】:

【参考方案1】:

使用-e选项时不需要hivevar,可以直接替换变量。此外,如果分区为yyyy-MM 格式,则不需要在分区规范中添加额外的date 函数,您可以仅使用shell 以所需格式计算日期。 'yyyy-MM' 也应该用引号引起来,因为分区是字符串,像这样:val_dt&lt;='2018-05'

试试这个:

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

【讨论】:

以上是关于Hive ALTER 命令删除值超过 24 个月的分区的主要内容,如果未能解决你的问题,请参考以下文章

2017年10月24日制定的3个月的学习目标与计划!!!!!

从当前日期回溯 24 个月的 where 子句存在问题

Hive - 如何从 Hive 获取最近几个月的数据?

使用 .NET 删除目录中超过 3 个月的文件

SQL Hive - 计算前几个月的滚动 SUM、AVG

超过 6 个月的 SQL Server DETACH 数据库