如何在 Hive SQL 中声明和使用变量?
Posted
技术标签:
【中文标题】如何在 Hive SQL 中声明和使用变量?【英文标题】:How to declare and use variable in Hive SQL? 【发布时间】:2020-11-16 19:22:10 【问题描述】:我使用以下语法在 hive sql 查询中声明和使用变量。但它给了我如下错误
SET aa='10';
SELECT
col1 as data,
$aa as myVar from myTable;
错误: org.apache.hive.service.cli.HiveSQLException:处理语句时出错:无法在运行时修改 aa。它不在允许在运行时修改的参数列表中
我也尝试过使用 hiveconf
SELECT $hiveconf:aa from myTable;
【问题讨论】:
【参考方案1】:你不能像那样传递变量。您需要使用--hivevar
。您可以使用以下脚本创建一个 hql 文件 - hiveqry.hql。请注意,您可以使用普通变量或 hivevar 关键字。
select * from $hivevar:aa;
select * from $aa;
然后像下面这样调用该脚本beeline --hivevar table=myTable --hivevar aa=100 -f hiveqry.hql
【讨论】:
【参考方案2】:根据 Hive 版本,当您在未明确指定命名空间(hiveconf
或 hivevar
)的情况下设置变量时,它可能会使用 hiveconf
作为默认命名空间或可能不起作用。
顺便说一句,这在 Hive 1.2 中有效:
SET aa='10';
SELECT $hiveconf:aa;
如果您在设置变量时明确指定命名空间,它将与 hivevar 和 hiveconf 一起使用
作品:
SET hivevar:aa='10';
SELECT $hivevar:aa;
同样有效:
SET hiveconf:aa='10';
SELECT $hiveconf:aa;
不起作用:
SET aa='10';
SELECT $hivevar:aa as myvar;
另外,如果上述命令不起作用,请检查是否启用了变量替换(默认为 true):
set hive.variable.substitute=true;
如果设置为 false,则替换不起作用。
阅读文档:LanguageManual VariableSubstitution
【讨论】:
感谢您的回复。我正在使用齐柏林飞艇。当我使用您建议的查询进行测试时: SET hivevar:aa='10';选择 $hivevar:aa;得到这个错误:java.lang.RuntimeException:无法识别动态表单类型:hivevar @DineshMadhup 阅读此问题:issues.apache.org/jira/browse/ZEPPELIN-4556 已在 0.9.0 版中解决。 "此 PR 允许用户通过段落本地属性覆盖表单类型。例如 %jdbc(form=native)" 我确实尝试过使用 %jdbc(form=native) 但仍然出现错误,例如:java.lang.RuntimeException: Could not identify dynamic form with type: hiveconf以上是关于如何在 Hive SQL 中声明和使用变量?的主要内容,如果未能解决你的问题,请参考以下文章