在 Hive 中删除具有非常量值的分区
Delete partition with non-constant value in Hive
我想删除 Hive 中的分区,其值在另一个 table 中或由函数动态创建。例如:
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))
但是,这个returns出现如下错误:
cannot recognize input near 'FROM_UNIXTIME' '(' 'UNIX_TIMESTAMP' in constant
如果我用固定号码替换对 FROM_UNIXTIME()
的整个调用,它就可以正常工作。有没有办法在不对分区值进行硬编码的情况下做到这一点?
在 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)"
有关更多详细信息,请参阅有关配置单元变量的 this and this 链接。
我想删除 Hive 中的分区,其值在另一个 table 中或由函数动态创建。例如:
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))
但是,这个returns出现如下错误:
cannot recognize input near 'FROM_UNIXTIME' '(' 'UNIX_TIMESTAMP' in constant
如果我用固定号码替换对 FROM_UNIXTIME()
的整个调用,它就可以正常工作。有没有办法在不对分区值进行硬编码的情况下做到这一点?
在 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)"
有关更多详细信息,请参阅有关配置单元变量的 this and this 链接。