在Hive中删除具有非恒定值的分区

时间:2019-06-14 19:14:36

标签: sql database hive database-partitioning

我想删除Hive中的分区,其值在另一个表中或由函数即时创建。例如:

ALTER TABLE
    table_1
DROP IF EXISTS
    PARTITION (dt = FROM_UNIXTIME(UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, 63),'yyyy-MM-dd'), 'yyyyMMdd'))

或者类似这样的东西:

ALTER TABLE
    table_1
DROP IF EXISTS
    PARTITION (dt = SELECT date FROM table_2 LIMIT 1))

但是,这将返回以下错误:

cannot recognize input near 'FROM_UNIXTIME' '(' 'UNIX_TIMESTAMP' in constant

如果我用固定数字替换对FROM_UNIXTIME()的整个呼叫,则可以正常工作。有没有一种方法可以对分区的值进行硬编码?

1 个答案:

答案 0 :(得分:0)

在Hive-cli中不支持该功能,为此我们需要使用 Shell脚本

示例脚本:

#!/bin/bash
my_value=$(hive -S -e "select FROM_UNIXTIME(UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, 63),'yyyy-MM-dd'), 'yyyyMMdd')")
echo $my_value
hive -S -e "alter table table_1 drop partition (dt = $my_value)"

有关更多详细信息,请参见关于配置单元变量的thisthis链接。