我正在尝试将数据插入到 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;
但它仍然将其视为函数而不是文字字符串。
我将使用“.sh”文件并将我的 hive 查询作为 hive -e 'query' 或 hive -f 'query.hql' 传递
在bash中,很容易达到你的要求。