文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SQL-Hive中的Where语句解析

2024-12-03 04:07

关注

本文转载自微信公众号「巡山猫说数据」,作者巡山猫说数据。转载本文请联系巡山猫说数据公众号。

你好,我是巡山猫!

今天我们来讲讲Hive中最常用的 where 语句知识要点。

01-基础语法

命令如下:

  1. SELECT 列名 
  2. FROM 表名 
  3. WHERE 列名 运算符 值 [AND 列名 运算符 值] [OR 列名 运算符 值]; 

备注:WHERE后的列名必须用真实列名,不能使用自定义的别名,否则会报错。

02-谓词操作符详解

下面表中描述了谓词操作符,这些操作符同样可以用于JOIN…ON和HAVING语句中,后续我们会逐一介绍这两个语句

备注:NULL在Hive中代表空值的意思。

03-AND & OR

用AND连接两个及以上的谓词操作符代表且的意思,即必须所有条件同时满足;用OR连接两个及以上的谓词操作符代表或的意思,即至少有一个条件满足即可。

下面举几个例子:

取出表t_od_use_cnt中满足以下条件的5条记录:

·日期为20190101到20190102之间;

·平台取ios平台(1为andriod,2为ios);

·当日使用次数大于等于30。

语句如下:

  1. SELECT * 
  2. FROM app.t_od_use_cnt 
  3. WHERE date_8 BETWEEN 20190101 AND 20190102 
  4.       AND platform = '2' 
  5.       AND use_cnt >= 30 limit 5; 

备注:数值型的值可以直接写,但字符格式及string格式的值必须加引号

运行结果如下:

  1. hive (app)> SELECT * 
  2.           > FROM app.t_od_use_cnt 
  3.           > WHERE date_8 BETWEEN 20190101 AND 20190102 
  4.           >       AND platform = '2' 
  5.           >       AND use_cnt >= 30 limit 5; 
  6. OK 
  7. t_od_use_cnt.platform  t_od_use_cnt.app_version  t_od_use_cnt.user_id  t_od_use_cnt.use_cnt  t_od_use_cnt.is_active  t_od_use_cnt.date_8 
  8. 2  1.3  10001  49  1  20190101 
  9. 2  1.1  10016  37  1  20190101 
  10. 2  1.4  10025  44  1  20190101 
  11. 2  1.1  10034  49  1  20190101 
  12. 2  1.2  10039  37  1  20190101 
  13. Time taken: 0.28 seconds, Fetched: 5 row(s) 

取出表t_od_use_cnt中满足以下条件的5条记录:

·日期大于20190102;

·1,3和1.4版本且当日使用次数大于等于30 或 1,1和1.2版本且当日使用次数大于等于20。

语句如下:

  1. SELECT * 
  2. FROM app.t_od_use_cnt 
  3. WHERE date_8 > 20190102 
  4.       AND ( 
  5.             ( 
  6.                   app_version IN ('1.3''1.4'
  7.                   AND use_cnt >= 30 
  8.                   ) 
  9.             OR ( 
  10.                   app_version IN ('1.1''1.2'
  11.                   AND use_cnt >= 20 
  12.                   ) 
  13.             ) limit 5; 

备注:当and、or同时出现时,要使用()将条件区分开,Hive会优先执行括号内的条件语句。这样一来避免逻辑错误,二来使逻辑更清晰。

运行结果如下:

  1. hive (app)> SELECT * 
  2.           > FROM app.t_od_use_cnt 
  3.           > WHERE date_8 > 20190102 
  4.           >       AND ( 
  5.           >             ( 
  6.           >                   app_version IN ('1.3''1.4'
  7.           >                   AND use_cnt >= 30 
  8.           >                   ) 
  9.           >             OR ( 
  10.           >                   app_version IN ('1.1''1.2'
  11.           >                   AND use_cnt >= 20 
  12.           >                   ) 
  13.           >             ) limit 5; 
  14. OK 
  15. t_od_use_cnt.platform  t_od_use_cnt.app_version  t_od_use_cnt.user_id  t_od_use_cnt.use_cnt  t_od_use_cnt.is_active  t_od_use_cnt.date_8 
  16. 2  1.2  10400  40  1  20190103 
  17. 1  1.2  10402  32  1  20190103 
  18. 1  1.2  10403  41  1  20190103 
  19. 2  1.4  10405  50  1  20190103 
  20. 2  1.1  10406  24  1  20190103 
  21. Time taken: 0.298 seconds, Fetched: 5 row(s) 

04-Like & Rlike & Regexp

这三种语句的含义和用法上面已经有所介绍,rlike、regexp功能和like功能一致,只是like是后面只支持简单表达式匹配(_%),而rlike、regexp则支持标准正则表达式语法。所以如果正则表达式使用熟练的话,建议使用rlike,功能更加强大。所有的like匹配都可以被替换成rlike。反之,则不行。注意事项:like是从头逐一字符匹配的,但是rlike则不是。这里我们举几个例子。

取出表t_od_use_cnt中满足以下条件的5条记录:

·日期大于20190102;

·user_id以5结尾

语句如下:

  1. SELECT * 
  2. FROM app.t_od_use_cnt 
  3. WHERE date_8 > 20190102 
  4.       AND user_id LIKE '%5' limit 5; 

运行结果如下:

  1. hive (app)> SELECT * 
  2.           > FROM app.t_od_use_cnt 
  3.           > WHERE date_8 > 20190102 
  4.           >       AND user_id LIKE '%5' limit 5; 
  5. OK 
  6. t_od_use_cnt.platform  t_od_use_cnt.app_version  t_od_use_cnt.user_id  t_od_use_cnt.use_cnt  t_od_use_cnt.is_active  t_od_use_cnt.date_8 
  7. 2  1.4  10405  50  1  20190103 
  8. 1  1.1  10415  30  1  20190103 
  9. 2  1.3  10425  15  1  20190103 
  10. 1  1.3  10435  3  0  20190103 
  11. 1  1.4  10445  43  1  20190103 
  12. Time taken: 0.977 seconds, Fetched: 5 row(s) 

取出表t_od_use_cnt中满足以下条件的5条记录:

·日期大于等于20190102;

·user_id中含有45。

语句如下:

  1. SELECT * 
  2. FROM app.t_od_use_cnt 
  3. WHERE date_8 > 20190102 
  4.       AND user_id RLIKE '45' limit 5; 

还可以把RLIKE替换为REGEXP:

  1. SELECT * 
  2. FROM app.t_od_use_cnt 
  3. WHERE date_8 > 20190102 
  4.       AND user_id REGEXP '45' limit 5; 

运行结果如下:

  1. hive (app)> SELECT * 
  2.           > FROM app.t_od_use_cnt 
  3.           > WHERE date_8 > 20190102 
  4.           >       AND user_id RLIKE '45' limit 5; 
  5. OK 
  6. t_od_use_cnt.platform  t_od_use_cnt.app_version  t_od_use_cnt.user_id  t_od_use_cnt.use_cnt  t_od_use_cnt.is_active  t_od_use_cnt.date_8 
  7. 1  1.4  10445  43  1  20190103 
  8. 2  1.5  10450  6  1  20190103 
  9. 2  1.5  10451  38  1  20190103 
  10. 1  1.4  10452  44  1  20190103 
  11. 1  1.5  10453  37  1  20190103 
  12. Time taken: 0.13 seconds, Fetched: 5 row(s) 
  13.   
  14.   
  15.   
  16. hive (app)> SELECT * 
  17.           > FROM app.t_od_use_cnt 
  18.           > WHERE date_8 > 20190102 
  19.           >       AND user_id REGEXP '45' limit 5; 
  20. OK 
  21. t_od_use_cnt.platform  t_od_use_cnt.app_version  t_od_use_cnt.user_id  t_od_use_cnt.use_cnt  t_od_use_cnt.is_active  t_od_use_cnt.date_8 
  22. 1  1.4  10445  43  1  20190103 
  23. 2  1.5  10450  6  1  20190103 
  24. 2  1.5  10451  38  1  20190103 
  25. 1  1.4  10452  44  1  20190103 
  26. 1  1.5  10453  37  1  20190103 
  27. Time taken: 0.352 seconds, Fetched: 5 row(s) 

 

RLIKE、REGEXP主要用于正则匹配,具体的正则表达式匹配规则我们后面的文章来具体说明。

 

来源:巡山猫说数据内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯