在Hive中使用变量

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值