前言
本文主要讲的是一些Hive SQL的基础知识,希望能帮助到想要接触大数据分析和刚接触大数据分析的同学。实际永远比所见的复杂,但万丈高楼平地起,一切来源于基础。
关键字:初步了解sql每个关键字的功能
执行顺序/执行计划:看懂执行步骤,有助优化sql和排查sql执行遇到的问题
SQL优化/特殊运算/特殊函数:提高SQL的执行效率
补充知识:表结构处理语句/SQL书写规范/数据仓库基础知识
关键字
select a.col1,
count(distinct b.col2) as col2 --count:聚合函数,依据gourp条件汇总计算
from (
select * --select:选取数据列
from table1 --from:获取源数据
where col1 > 5 --where:过滤源数据
and (col2 < 5
or col3 = 5)
) as a --as:赋予表别名
left join table2 b --left/right/inner/full join:将两份源数据进行合并
on a.col1 = b.col1 --on:关联条件
inner join table3 c
on a.col1 = c.col1
full join table4 d
on a.col1 = d.col1
group by a.col1 --group by:分组,聚合运算的汇总依据【类比excel上的透视表】
having count(distinct b.col2) > 0 --having:对聚合后的数据结果进行过滤
order by col2 --order by:对col2排序
join的执行逻辑
- 左右表形成笛卡尔积的数据集【a*b条数】
- 根据关联条件过滤数据集
- 添加外部行,补全主表【即left join 添加所有右表为null的左表;full join 添加所有右表为null的左表和所有左表为null的右表】
关键字执行顺序
select a.user_id,
count(distinct b.guid) as cnt
from table1 a
left join table1 b
on a.user_id = b.user_id
where b.last_login_date >= '2020-01-01'
group by a.user_id
having cnt > 1
order by cnt desc
- from:获取源数据
- join:将两份源数据进行合并
- where:过滤源数据【注:左表的where条件会优先于join执行】