Hive ALTER 命令删除值早于 24 个月的分区
Hive ALTER command to drop partition having values older than 24 months
我有一个配置单元 table(consumer_data) 分区列 'val_dt' 这是一个 string 列,其值在 日期格式'yyyy-MM'。
我在 table 中有多个分区,从“2015-01”到“2020-04”。每个月都会将数据增量添加到 table,因此添加的下一个分区将是“2020-05”。
我想删除 超过 24 个月[=36]的分区 =]。此分区删除每月进行一次,以仅保留最近 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
使用-e
选项时不需要hivevar
,直接代入变量即可。此外,如果分区为 yyyy-MM
格式,则分区规范中不需要额外的 date
函数,您可以仅使用 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')')"
我有一个配置单元 table(consumer_data) 分区列 'val_dt' 这是一个 string 列,其值在 日期格式'yyyy-MM'。
我在 table 中有多个分区,从“2015-01”到“2020-04”。每个月都会将数据增量添加到 table,因此添加的下一个分区将是“2020-05”。
我想删除 超过 24 个月[=36]的分区 =]。此分区删除每月进行一次,以仅保留最近 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
使用-e
选项时不需要hivevar
,直接代入变量即可。此外,如果分区为 yyyy-MM
格式,则分区规范中不需要额外的 date
函数,您可以仅使用 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')')"