从函数中设置 HIVE 中的变量

问题描述 投票:0回答:1

我正在尝试将数据插入到 Hive 表中,该表的动态分区值需要是计算日期,但 Hive 的 PARTITION 子句似乎不支持表达式或函数。

我有一个基准日期,比如“2024-11-04”,我想计算第二天(“2024-11-05”)并将其用作分区值。所以我尝试直接在 PARTITION 子句中使用 DATE_ADD 或 date_format 等函数,但出现错误,因为 Hive 需要文字字符串。

INSERT OVERWRITE TABLE my_table 
PARTITION (date_time=DATE_ADD(TO_DATE('2024-11-04', 'yyyy-MM-dd'), 1))
SELECT * FROM source_table;

错误

Error in query: Syntax error at or near '(' (line 3, pos 92)
== SQL ==
INSERT OVERWRITE TABLE my_table 
PARTITION (date_time=DATE_ADD(TO_DATE('2024-11-04', 'yyyy-MM-dd'), 1))
I also tried assigning the computed date to a Hive variable:

我还尝试将计算出的日期分配给 Hive 变量:

SET partition_date = date_format(date_add(to_date('2024-11-04', 'yyyy-MM-dd'), 1), 'yyyy-MM-dd');

INSERT OVERWRITE TABLE my_table 
PARTITION (date_time='${hiveconf:partition_date}')
SELECT * FROM source_table;

但它仍然将其视为函数而不是文字字符串。

似乎这里也提到了同样的问题

apache-spark apache-spark-sql hive
1个回答
-1
投票

我将使用“.sh”文件并将我的 hive 查询作为 hive -e 'query' 或 hive -f 'query.hql' 传递

在bash中,很容易达到你的要求。

© www.soinside.com 2019 - 2024. All rights reserved.