删除配置单元中具有非常量值的分区

1tuwyuhd  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(398)

我想删除配置单元中的一个分区,它的值在另一个表中或由一个函数动态创建。例如:

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() 有了固定的数字,它就可以正常工作了。有没有一种方法可以在不硬编码分区值的情况下实现这一点?

ckocjqey

ckocjqey1#

在hivecli不支持的情况下,我们需要使用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)"

有关更多详细信息,请参阅此链接和有关配置单元变量的链接。

相关问题