How to declare and use variable in Hive SQL?

瘦欲@ 提交于 2021-01-28 19:55:29

问题


I am using below syntax to declare and use variable in hive sql query. But it gives me an error as below

SET aa='10';

SELECT
col1 as data,
${aa} as myVar from myTable;

ERROR: org.apache.hive.service.cli.HiveSQLException: Error while processing statement: Cannot modify aa at runtime. It is not in list of params that are allowed to be modified at runtime

I have also tried using hiveconf

SELECT ${hiveconf:aa} from myTable;

回答1:


You can not pass variable like that. You need to use --hivevar. You can create a hql file with below script - hiveqry.hql. Pls note you can use either a normal variable or with hivevar keyword.

select * from ${hivevar:aa};
select * from ${aa};

Then call that script like below
beeline --hivevar table=myTable --hivevar aa=100 -f hiveqry.hql




回答2:


Depending on Hive version, when you are setting variable without explicitly specifying the namespace (hiveconf or hivevar), it may work with hiveconf as a default namespace or may not work.

BTW this works in Hive 1.2:

SET aa='10';
SELECT ${hiveconf:aa};

If you specify the namespace explicitly when setting variable, it will work with both hivevar and hiveconf

Works:

SET hivevar:aa='10';
SELECT ${hivevar:aa};

Also works:

SET hiveconf:aa='10';
SELECT ${hiveconf:aa};

Does not work:

SET aa='10';
SELECT ${hivevar:aa} as myvar;

Also if above commands do not work, check if variable substitution is enabled (default is true):

set hive.variable.substitute=true;

If set to false, substitution does not work.

Read the documentation: LanguageManual VariableSubstitution



来源:https://stackoverflow.com/questions/64864397/how-to-declare-and-use-variable-in-hive-sql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!