首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Oozie工作流中运行的配置单元查询中使用用户名创建表名?

在Oozie工作流中运行的配置单元查询中使用用户名创建表名?
EN

Stack Overflow用户
提问于 2021-02-04 21:42:02
回答 1查看 87关注 0票数 1

我有一个Hive SQL脚本/动作,作为Oozie工作流的一部分。我正在执行CREATE TABLE AS SELECT以输出结果。我想使用用户名加上附加的字符串来命名表(例如"User123456_output_table"),但似乎无法获得正确的语法。

代码语言:javascript
运行
复制
set tablename=${hivevar:current_user()};
CREATE TABLE `${hiveconf:tablename}_output_table` AS SELECT ...

这不起作用,并给出了:

代码语言:javascript
运行
复制
Error while compiling statement: FAILED: IllegalArgumentException java.net.URISyntaxException: Relative path in absolute URI: ${hivevar:current_user()%7D_output_table

或更改第一行以设置tablename=${current_user()};开始运行SELECT查询,但最终以以下代码停止:

代码语言:javascript
运行
复制
Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hive.ql.metadata.HiveException: [${current_user()}_output_table]: is not a valid table name

或更改第一行以设置tablename=current_user();开始运行SELECT查询,但最终以以下代码停止:

代码语言:javascript
运行
复制
Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hive.ql.metadata.HiveException: [current_user()_output_table]: is not a valid table name

或者,有没有办法通过参数从Oozie工作流中传递用户名?

我使用Hue而不是命令行来完成所有这些工作。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-02-04 22:14:23

这是错误的:set tablename=${hivevar:current_user()}; -它将不会按原样被解析和替换。

Hive在替换之前不计算变量,它按原样替换它们,变量中的所有函数都不计算。变量只是文本替换。

这一点:

代码语言:javascript
运行
复制
set tablename=current_user();
CREATE TABLE `${hiveconf:tablename}_output_table` ...

解析为

代码语言:javascript
运行
复制
CREATE TABLE `current_user()_output_table` ...

和函数在表名中不受支持,它不会以这种方式工作。

解决方案是在脚本之外计算函数,并将它们作为参数传递。

请参阅此博客:https://prodlife.wordpress.com/2013/12/06/parameterizing-hive-actions-in-oozie-workflows/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66046873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档