[转载]sql(hive)中变量的使用

4 篇文章 0 订阅

文章来源:https://zhuanlan.zhihu.com/p/89062863

我们在学 Python 或者其他编程语言的时候都应该有学过变量这么一个东西,可是 Sql 这种查询语言中怎么也有变量呢?具体有什么用呢?

我们来看一下实际应用场景。

现在有这么一个表 t ,表结构如下:

time1 表示浏览日期,
time2 表示加购物车日期,
time3 表示下订单日期,
time4 表示收货日期。

这四个日期有什么关系呢?就是都有可能不相等,也有可能都相等,还有可能部分相等。如果我们想要看这四个日期都发生在20190801这一天的订单应该怎么看呢?

Sql代码可以这么写:

select
    order_id
from
    t
where time1 = "2019-08-01"
    and time2 = "2019-08-01"
    and time3 = "2019-08-01"
    and time4 = "2019-08-01"

那如果现在老板又想要看一下这四个日期都发生在20190808这一天的订单,该怎么看呢?很简单,直接把上面代码中的日期改一下就可以了。如果老板还想别的,也直接改代码中的日期就可以,这样是可以达到目的,但是大家有没有想过,如果一段代码中这种需要改的地方过多,而且代码与代码不是挨在一块的时候,这个时候如果手动去查找并修改的话,很有可能漏掉或改错。

这个时候变量就该出场了,之前讲过,所谓的变量就是一个变化的量,是一个容器,在你可能要更改的地方放一个变量,而不是固定的值,这样每次你要更改的时候,只需要更改变量的值就可以,其他地方的变量也会跟着一起变,省时又省力,美滋滋。

那我们先来看一下 Mysql 数据库中怎么设置变量,以下是在 Mysql 中设置变量day的几种写法:

set @day = "2019-08-01";
set @day := "2019-08-01";
select @day := "2019-08-01";

注意,如果使用 select 关键词进行变量赋值时,不可以使用 = 号,因为会默认把它当作比较运算符,而不是赋值,但是用关键词 set 进行变量赋值时是可以直接用 = 号的。现在变量定义并且赋值好了,对于上面的代码我们就可以这么写了。

set @day = "2019-08-01";
select
    order_id
from
    t
where time1 = @day
    and time2 = @day
    and time3 = @day
    and time4 = @day

这样每次要什么日期的数据,只需要改变变量day的值就可以了。

我们再来看看Hql(Hive-sql)中的变量赋值怎么设置,变量赋值的时候也是用的关键词 set,在变量引用那里和 Mysql 稍有不同,需要多加一个参数 hiveconf。

set day = "2019-08-01";
select
    order_id
from
    t
where time1 = ${hiveconf:day}
    and time2 = ${hiveconf:day}
    and time3 = ${hiveconf:day}
    and time4 = ${hiveconf:day}

以上就是关于 Mysql 和 Hql 这两种数据库中变量的使用方法,变量的用法很常见,也确实很有用,大家一定要熟练掌握。

 

作者:张俊红

来源:俊红的数据分析之路

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Hive,可以使用变量来在SQL文件传递参数值。有几种方法可以在SQL使用变量。 一种方法是使用-hivevar参数来定义变量。在SQL文件,可以使用${变量名}来引用这些变量。例如,可以使用以下命令执行SQL脚本: ``` hive --hivevar minscore=60 --hivevar maxscore=85 -S -f test.sql ``` 在test.sql文件,可以使用${minscore}和${maxscore}来引用这些变量。 另一种方法是使用-hiveconf参数来定义变量。在SQL文件,同样可以使用${变量名}来引用这些变量。例如,可以使用以下命令执行SQL脚本: ``` hive -S -d minscore=60 -d maxscore=85 -f test.sql ``` 在test.sql文件,同样可以使用${minscore}和${maxscore}来引用这些变量。 此外,在shell脚本也可以定义变量并在Hive使用。例如,可以创建一个shell脚本文件shelltest,其定义了minscore和maxscore变量,并在Hive使用这些变量: ``` #!/bin/bash minscore=60 maxscore=70 hive -S -e "use hive_test;select * from score where score >= ${minscore} and score <= ${maxscore};" ``` 然后,通过给shell脚本文件赋予执行权限并执行该脚本来运行Hive查询: ``` chmod 777 shelltest sh shelltest ``` 需要注意的是,在命令行或shell脚本定义变量时,等号左右两侧不能有空格。另外,使用-hiveconf、-hivevar或-d时,如果需要定义多个变量,每个变量前面都需要加对应的参数,一个参数只对应一个变量。在命令行使用hive -e参数调用变量时,-e参数后面的SQL语句需要使用单引号'',否则无法解析获取到变量。 #### 引用[.reference_title] - *1* *3* [hive变量使用](https://blog.csdn.net/weixin_43990245/article/details/124433738)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Hive开发使用变量的两种方法](https://blog.csdn.net/peishuai1987/article/details/89882731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值