使用 UDF 的输出设置 Hive 变量
Set Hive variable with the output of a UDF
我正在尝试使用 UDF 函数的输出设置一个 Hive 变量,这样我可以稍后在我的 .hql 脚本中的 INSERT INTO myTable
中使用该值。
这是myTable
的DDL:
CREATE TABLE myTable(
CreationTimestamp TIMESTAMP,
Tablename CHAR(50),
LastExtractedTimestamp TIMESTAMP,
OozieJobID CHAR(40)
);
以下无效:
set hiveconf:ct=select current_timestamp;
INSERT INTO mytable VALUES ('${hiveconf:ct}','test','2015-12-11 11:25:03.341','testID');
而且这个也不起作用(不带引号):
set hiveconf:ct=select current_timestamp;
INSERT INTO myTable VALUES (${hiveconf:ct}, 'test','2015-12-11 11:25:03.341','testID');
结果是我在 table 中插入了一行,用空值代替了我的变量值:
null test 2015-12-11 11:25:03.341 testID
所以现在我正在使用以下解决方法:
INSERT INTO myTable select * from (select current_timestamp, 'test','2015-12-11 11:25:03.341','testID') as dummy;
你有什么建议或更好的方法来实现这个目标吗?
谢谢 ;-)
那是不可能的。为什么 ?当您提交查询并解析查询时,Hive 变量会插入到查询中,因此 在 之前,UDF 甚至有机会 运行。
考虑使用 oozie 这样的东西,这样你就可以真正构建一个模块化的工作流程。
我正在尝试使用 UDF 函数的输出设置一个 Hive 变量,这样我可以稍后在我的 .hql 脚本中的 INSERT INTO myTable
中使用该值。
这是myTable
的DDL:
CREATE TABLE myTable(
CreationTimestamp TIMESTAMP,
Tablename CHAR(50),
LastExtractedTimestamp TIMESTAMP,
OozieJobID CHAR(40)
);
以下无效:
set hiveconf:ct=select current_timestamp;
INSERT INTO mytable VALUES ('${hiveconf:ct}','test','2015-12-11 11:25:03.341','testID');
而且这个也不起作用(不带引号):
set hiveconf:ct=select current_timestamp;
INSERT INTO myTable VALUES (${hiveconf:ct}, 'test','2015-12-11 11:25:03.341','testID');
结果是我在 table 中插入了一行,用空值代替了我的变量值:
null test 2015-12-11 11:25:03.341 testID
所以现在我正在使用以下解决方法:
INSERT INTO myTable select * from (select current_timestamp, 'test','2015-12-11 11:25:03.341','testID') as dummy;
你有什么建议或更好的方法来实现这个目标吗?
谢谢 ;-)
那是不可能的。为什么 ?当您提交查询并解析查询时,Hive 变量会插入到查询中,因此 在 之前,UDF 甚至有机会 运行。 考虑使用 oozie 这样的东西,这样你就可以真正构建一个模块化的工作流程。