本文共 1662 字,大约阅读时间需要 5 分钟。
上次课复习:
1. hive的view非常简单,只是元数据层面,所以hdfs下根本找不到的。
view主要用于复杂逻辑的隐藏
2. 侧视图
行转列专置
3. select 用于查询后面可以跟where limit等条件
多用Common Table Expression来代替子查询,思路清晰
4. join
内连接 左外连接 右外连接 全连接
in not in
exists
5.纵向合并union
union去重
union all不去重,速度快
6. hive数据加载和交换
load 相当于剪切,只能运行一次
insert into/overwrite values ( ,,)
insert into as select ....
还可以form 从一个公共表多次插入
7. order by比较慢 尽量提前过滤数据
SORT BY 单台机器上排序
DISTRIBUTE BY 对数据分组到不同机器上
8. GROUP BY 局限性在于select的列必须出现在GROUP BY后面
having 筛选聚合函数的条件
having和where的区别,有些类似。
——————————————————————————————————————————
新课:
1. GROUPING SETS
这东西其实非常简单,就是把几个group by语句合在一起写了。
(a,b)就是a和b同时,a就是只能select a ,所以b被我置为null。
还有()就是a,b都置为null。
2. CUBE/ROLLUP
CUBE就是所有group by后面列的组合
ROLLUP(向上聚合)
按层次表达出来,我只表达结构,
所以就是只有(a,b,c)和(a,b)和a和null了
1、2不做重点掌握
3.Window Functions(窗口函数) 重要
优势:相比GROUP BY没有对SELECT的列的限制。
主要讲排序、聚合和分析
窗口函数用法
Function() OVER
// OVER确定聚合函数范围
例子
排序类:
其实这些非常简单,我按行来解释:
前2行不说了
ROW_NUMBER()最重要
3. ROW_NUMBER() OVER () AS row_num //整体给出行号,不按列分区 不排序
4. RANK() OVER (PARTITION BY dept_num ORDER BY salary) AS rank // 分部门对工资排名
5.DENSE_RANK() OVER 紧凑的排名,比如并列第一之后的人,还是第二名,而不是标为第三名。
6. PERCENT_RANK() OVER 百分比排名 计算方法是 n-1/(total-1)
7. NTILE(2) OVER 按照部门对工资排序 并分出2个桶
聚合类:
COUNT
SUM
AVG
MAX/MIN
Hive 2.1.0新功能:按照聚合函数排序
ORDER BY sum(b)
例子:
分析类:
LEAD就是网上顶,前面的数据被顶掉2个。
LAG就是往后顶。括号里第三个属性都是表示如果没有这个值,默认填为NULL,你可以手动设置为0.
FIRST VALUE和LAST_VALUE 只有加了RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWNG
才会生效,筛选出第一个值和最后一个值。
这些都不是重点,用着用着就会了,别放太多精力,知道是干嘛的就行,用到再说。
重点来了!
窗口函数:它分为ROW和RANGE两种
行类窗口
写法就是ROWS BETWEEN <start_expr> AND <end_expr>
其中这两个参数可以选择这三种,分别代表 从最上面开始/到最下面结束、当前行开始、当前行前或后的N行开始。
例子:ROW Windows
结果:
Range Windows例子
跟row原理一样 只不过RANGE就是在那个基础上,比如说当前行减100到当前行。
转载地址:http://bkvws.baihongyu.com/