自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL-Hive中的Where語句解析

數(shù)據(jù)庫 MySQL
用AND連接兩個及以上的謂詞操作符代表且的意思,即必須所有條件同時滿足;用OR連接兩個及以上的謂詞操作符代表或的意思,即至少有一個條件滿足即可。

[[402095]]

本文轉(zhuǎn)載自微信公眾號「巡山貓說數(shù)據(jù)」,作者巡山貓說數(shù)據(jù)。轉(zhuǎn)載本文請聯(lián)系巡山貓說數(shù)據(jù)公眾號。

你好,我是巡山貓!

今天我們來講講Hive中最常用的 where 語句知識要點。

01-基礎(chǔ)語法

命令如下:

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

備注:WHERE后的列名必須用真實列名,不能使用自定義的別名,否則會報錯。

02-謂詞操作符詳解

下面表中描述了謂詞操作符,這些操作符同樣可以用于JOIN…ON和HAVING語句中,后續(xù)我們會逐一介紹這兩個語句

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

03-AND & OR

用AND連接兩個及以上的謂詞操作符代表且的意思,即必須所有條件同時滿足;用OR連接兩個及以上的謂詞操作符代表或的意思,即至少有一個條件滿足即可。

下面舉幾個例子:

1、取出表t_od_use_cnt中滿足以下條件的5條記錄:

·日期為20190101到20190102之間;

·平臺取ios平臺(1為andriod,2為ios);

·當(dāng)日使用次數(shù)大于等于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; 

備注:數(shù)值型的值可以直接寫,但字符格式及string格式的值必須加引號

運行結(jié)果如下:

  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) 

2、取出表t_od_use_cnt中滿足以下條件的5條記錄:

·日期大于20190102;

·1,3和1.4版本且當(dāng)日使用次數(shù)大于等于30 或 1,1和1.2版本且當(dāng)日使用次數(shù)大于等于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; 

備注:當(dāng)and、or同時出現(xiàn)時,要使用()將條件區(qū)分開,Hive會優(yōu)先執(zhí)行括號內(nèi)的條件語句。這樣一來避免邏輯錯誤,二來使邏輯更清晰。

運行結(jié)果如下:

  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

這三種語句的含義和用法上面已經(jīng)有所介紹,rlike、regexp功能和like功能一致,只是like是后面只支持簡單表達式匹配(_%),而rlike、regexp則支持標準正則表達式語法。所以如果正則表達式使用熟練的話,建議使用rlike,功能更加強大。所有的like匹配都可以被替換成rlike。反之,則不行。注意事項:like是從頭逐一字符匹配的,但是rlike則不是。這里我們舉幾個例子。

1、取出表t_od_use_cnt中滿足以下條件的5條記錄:

·日期大于20190102;

·user_id以5結(jié)尾

語句如下:

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

運行結(jié)果如下:

  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) 

2、取出表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; 

運行結(jié)果如下:

  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主要用于正則匹配,具體的正則表達式匹配規(guī)則我們后面的文章來具體說明。

 

責(zé)任編輯:武曉燕 來源: 巡山貓說數(shù)據(jù)
相關(guān)推薦

2021-04-30 08:01:36

SQLHiveSelect

2021-04-18 18:13:42

SQLHive表格

2010-09-08 15:51:53

SQL語句where

2024-10-05 00:00:10

SQL語句指定連接條

2024-10-15 16:53:07

2017-05-16 11:20:51

SQL語句解析

2011-04-02 14:06:46

SQL Server MERGE

2021-07-28 07:22:40

SQL順序Hive

2023-03-29 09:22:03

SQLWhere語句

2010-04-20 15:22:34

Oracle SQL

2019-11-06 09:30:35

SQL查詢語句數(shù)據(jù)庫

2009-11-06 17:13:24

Oracle SQL語

2010-09-26 09:50:36

SQL Where子句

2010-11-12 13:08:36

動態(tài)sql語句

2010-09-17 16:53:14

SQL中CREATE

2010-09-07 11:53:00

SQL語句

2010-09-17 09:35:51

SQL中if語句

2010-09-26 14:46:19

SQL WHERE子句

2010-09-07 13:50:41

SQL語句

2009-01-14 09:28:12

OracleSQL10g
點贊
收藏

51CTO技術(shù)棧公眾號