Hive知识点总结(三)

Hive知识点总结(一)(基本概念、运行方式、创建库表、数据读取、文件格式):点击查看

Hive知识点总结(二)(数据类型及修改表定义):点击查看

5、hive查询语法

hive在1.2.0之前不支持“不等值”join,但在1.2.0后支持不等值join,只是语法必须按如下形式写:

SELECT A.*,B.* from A,B WHERE A.ID>B.ID;

基本查询语法跟标准sql基本一致;

SELECT FIELDS,FUNCTION(FIELDS)
FROM T1
JOIN T2
WHERE CONDITION
GROUP BY FILEDS
HAVING CONDTION
ORDER BY FIELDS DESC|ASC
select 
a.name as aname,
a.numb as anumb,
b.name as bname,
b.nick as bnick
from t_a a
right outer join t_b b
on a.name=b.name

hive中不支持exist/IN子查询,可以用hive特殊的left semi join(不会取右表的数据)来实现同样的效果:


select 
a.name as aname,
a.numb as anumb
from t_a a
left semi join t_b b
on a.name=b.name;

注意: left semi join的 select子句中,不能有右表的字段

我们重点总结一下group by 分组查询:

select dt,count(*),max(ip) as cnt from t_access group by dt;
select dt,count(*),max(ip) as cnt from t_access group by dt having dt>'20170804';

select
dt,count(*),max(ip) as cnt
from t_access
where url='http://www.edu360.cn/job'
group by dt having dt>'20170804';
注意: 一旦有group by子句,那么,在select子句中就不能有 (分组字段,聚合函数) 以外的字段

为什么where必须写在group by的前面,为什么group by后面的条件只能用having?
因为,where是用于在真正执行查询逻辑之前过滤数据用的,having是对group by聚合之后的结果进行再过滤;

上述语句的执行逻辑:
1、where过滤不满足条件的数据
2、用聚合函数和group by进行数据运算聚合,得到聚合结果
3、用having条件过滤掉聚合结果中不满足条件的数据




猜你喜欢

转载自blog.csdn.net/qq_26803795/article/details/80780307