简体   繁体   中英

How to declare and use variable in Hive SQL?

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;

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM