本文转载自微信公众号《寻山猫谈数据》,作者寻山猫谈数据。转载本文请联系迅山猫谈数据公众号。大家好,我是寻山猫!今天我们就来说说Hive中最常用的where语句知识点。01-基本语法命令如下:SELECT列名FROM表名WHERE列名运算符值[AND列名运算符值][OR列名运算符值];注意:WHERE后面的列名必须使用真实的列名,不能使用自定义别名,否则会报错。02-谓词运算符详解谓词运算符如下表所述。这些运算符也可以用在JOIN...ON和HAVING语句中。后面我们会一一介绍这两个语句。备注:NULL表示Hive中的空值。03-AND&OR用AND连接两个或多个谓词运算符来表示and,即所有条件必须同时满足;用OR连接两个或多个谓词运算符表示或,即至少满足一个条件即可。下面举几个例子:1.从表t_od_use_cnt中取出5条满足以下条件的记录:日期在20190101到20190102之间;platform为ios平台(1为andriod,2为ios);30.语句如下:SELECT*FROMapp.t_od_use_cntWHEREdate_8BETWEEN20190101AND20190102ANDplatform='2'ANDuse_cnt>=30limit5;备注:数值可以直接写,但是字符格式和字符串格式的值必须用引号引起来。Theresultsareasfollows:hive(app)>SELECT*>FROMapp.t_od_use_cnt>WHEREdate_8BETWEEN20190101AND20190102>ANDplatform='2'>ANDuse_cnt>=30limit5;OKt_od_use_cnt.platformt_od_use_cnt.app_versiont_od_use_cnt.user_idt_od_use_cnt.use_cntt_od_use_cnt.is_activet_od_use_cnt.date_821.3100014912019010121.1100163712019010121.4100254412019010121.1100344912019010121.21003937120190101Timetaken:0.28seconds,Fetched:5row(s)2、在t_od_use_cnt中取出5条满足以下条件的记录:日期大于20190102;版本1、3、1.4且当日使用次数大于等于30或版本1、1、1.2且当日使用次数大于等于20。声明为如下:SELECT*FROMapp.t_od_use_cntWHEREdate_8>20190102AND((app_versionIN('1.3','1.4')ANDuse_cnt>=30)OR(app_versionIN('1.1','1.2')ANDuse_cnt>=20))limit5;注意:当When和和or同时出现时,用()分隔条件,Hive会先执行括号内的条件语句。这样就避免了逻辑错误,逻辑更清晰。运行结果如下:hive(app)>SELECT*>FROMapp.t_od_use_cnt>WHEREdate_8>20190102>AND(>(>app_versionIN('1.3','1.4')>ANDuse_cnt>=30>)>OR(>app_versionIN('1.1','1.2')>ANDuse_cnt>=20>)>)limit5;OKt_od_use_cnt.platformt_od_use_cnt.app_versiont_od_use_cnt.user_idt_od_use_cnt.use_cntt_od_use_cnt.is_activet_od_use_cnt.date_821.2104004012019010311.2104023212019010311.2104034112019010321.4104055012019010321.11040624120190103Timetaken:0.298seconds,Fetched:5row(s)04-like&上面已经介绍了Rlike&Regexp这三个语句的含义和用法。rlike和regexp的功能与like相同,只是like只支持简单的表达式匹配(_%),而rlike和regexp支持标准的正则表达式公式语法。所以如果你熟练使用正则表达式,推荐使用rlike,功能更强大。所有like匹配都可以用rlike代替。反之则不行。注意:like从头开始??一个一个匹配字符,rlike不匹配。这里我们举几个例子。1、取出表t_od_use_cnt中满足以下条件的5条记录:日期大于20190102;user_id以5结尾,语句如下:SELECT*FROMapp.t_od_use_cntWHEREdate_8>20190102ANDuser_idLIKE'%5'limit5;Therunningresultsareasfollows:hive(app)>SELECT*>FROMapp.t_od_use_cnt>WHEREdate_8>20190102>ANDuser_idLIKE'%5'limit5;OKt_od_use_cnt.platformt_od_use_cnt.app_versiont_od_use_cnt.user_idt_od_use_cnt.use_cntt_od_use_cnt.is_activet_od_use_cnt.date_821.4104055012019010311.1104153012019010321.3104251512019010311.310435302019010311.41044543120190103Timetaken:0.977seconds,Fetched:5row(s)2、从t_od_use_cnt中取出5条满足以下条件的记录:·日期大于等于20190102;·user_id包含45。语句如下:SELECT*FROMapp.t_od_use_cntWHEREdate_8>20190102ANDuser_idRLIKE'45'limit5;您还可以将RLIKE替换为REGEXP:SELECT*FROMapp.t_od_use_cntWHEREdate_8>20190102ANDuser_idREGEXP'45'limit5;therunningresultisasfollows:hive(app)>SELECT_cnt_limit5>WHEREdate_8>20190102>ANDuser_idRLIKE'45'limit5;OKt_od_use_cnt.platformt_od_use_cnt.app_versiont_od_use_cnt.user_idt_od_use_cnt.use_cntt_od_use_cnt.is_activet_od_use_cnt.date_811.4104454312019010321.510450612019010321.5104513812019010311.4104524412019010311.51045337120190103Timetaken:0.13seconds,Fetched:5row(s)hive(app)>SELECT*>FROMapp。t_od_use_cnt>WHEREdate_8>20190102>ANDuser_idREGEXP'45'limit5;OKt_od_use_cnt.platformt_od_use_cnt.app_versiont_od_use_cnt.user_idt_od_use_cnt.use_cntt_od_use_cnt.is_activet_od_use_cnt.date_811.4104454312019010321.510450612019010321.5104513812019010311.4104524412019010311.51045337120190103Timetaken:0.352seconds,Fetched:5row(s)RLIKE、REGEXP主要用于正则匹配,具体的正则表达式匹配规则会在后面的文章中详细介绍明亮的
