【问题标题】:How to declare and use variable in Hive SQL?如何在 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;

【问题讨论】:

    标签: sql variables hive hiveql


    【解决方案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 版本,当您在未明确指定命名空间(hiveconfhivevar)的情况下设置变量时,它可能会使用 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
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 2020-07-25
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多