在Hive中使用变量
调用shell变量
# 在shell中定义变量
tablename="student"
varsubject="Math"
# 使用 hive -e 调用变量
hive -e "SELECT * FROM ${tablename} WHERE subjects = ${varsubject};"
调用Hive配置属性
Hive配置属性存储于 hiveconf 命名空间中,该命名空间中的属性是可读写的。在查询语句中插入 ‘${hiveconf:变量名}’,就可以通过 hive -hiveconf来替换变量。
- 如果有多个变量,每个变量前都要有参数 -hiveconf
- 变量赋值等号左右不能有空格(例如var_rows=10不能有空格)
${hiveconf:变量名}
这种调用变量的方式只能在HQL脚本中使用,在shell中使用时会被错误的解析
在SHELL中
SHELL脚本
#!/bin/bash
hive -hiveconf tablename="student" \
-hiveconf varsubject="Math" \
-f hivequery.sql
HQL脚本
SELECT *
FROM '${hiveconf:tablename}'
WHERE subjects = '${hiveconf:varsubject}';
在HQL中
-- 定义变量
set day='2018-08-30';
set window_day=50
-- 使用变量
select *
from table_name
where dt >= date_sub(${hiveconf:day}, ${hiveconf:window_day})
and dt <= ${hiveconf:day}
调用Hive命令行变量
Hive命令行变量,存储于 hivevar 命名空间中,该命名空间中的变量是可读写的。使用方式和hive配置属性类似,只是在查询语句中插入的是**‘${hivecar:变量名}’
- 可以使用
hive -hivevar
hive -d
两种方式对变量赋值 - 命名空间
hivevar:
可以省略。
在SHELL中
SHELL脚本
hive -hivevar tablename='t1' -hiveconf var_rows=10 -f test.sql
hive -d tablename='t1' -hiveconf var_rows=10 -f test.sql
HQL脚本
SELECT *
FROM ${tablename} -- hivevar 可省略
limit ${hiveconf:var_rows} -- hiveconf 不可省略
;
在HQL中
-- 定义变量
set hivevar:tablename='t1';
set hivevar:var_rows=10
-- 调用变量
SELECT * FROM ${tablename} limit ${var_rows};
参考
https://blog.csdn.net/weixin_30344995/article/details/98408332
https://www.jianshu.com/p/e2bef6eef52f
https://www.jianshu.com/p/6a14c80d96d7
https://www.cnblogs.com/daiyutage/p/5241802.html