【问题标题】:Set Hive variable with the output of a UDF使用 UDF 的输出设置 Hive 变量
【发布时间】:2016-03-17 15:00:56
【问题描述】:

我正在尝试使用 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');

结果是我在表中插入了一行,其中一个空值代替了我的变量值:

空测试 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。也许你可以,但我从来没有遇到过。鉴于您正在运行 .hql 脚本,为什么不执行 shell 命令并改为执行它呢? ! <command> 做到了 - 请参阅 sites.google.com/site/hadoopandhive/home/… 了解基本示例。
  • 谢谢 Bent,我现在可能会保留解决方法,但我会尝试 shell 选项,看看执行需要多长时间

标签: hadoop hive hiveql udf


【解决方案1】:

这是不可能的。为什么 ?当您提交查询并解析查询时,Hive 变量会插入到查询中,因此 before UDF 甚至有机会运行。 考虑使用 oozie 之类的东西,这样您就可以真正构建模块化工作流程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2014-07-22
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多