千锋教育-做有情怀、有良心、有品质的职业教育机构
窗口函数是用于分析用的一类函数,要理解窗口函数要先从聚合函数说起。 大家都知道聚合函数是将某列中多行的值合并为一行,比如sum、count等。 而窗口函数则可以在本行内做运算,得到多行的结果,即每一行对应一行的值。通用的窗口函数可以用下面的语法来概括:
Function() Over (Partition By Column1,Column2,Order By Column3)
窗口函数又分为以下三类: 聚合型窗口函数 分析型窗口函数 * 取值型窗口函数
聚合型窗口函数
-- SUM(), MIN(),MAX(),AVG(),COUNT() 这些聚合函数和Over函数配合使用
-- 列子:
SUM(result) OVER (PARTITION BY a ORDER BY b) -- 累计至当前行的和
SUM(result) OVER (PARTITION BY a ORDER BY b rows between 3 preceding and current row) --之前三行到当前行的和
分析型窗口函数
# RANk(),ROW_NUMBER(),DENSE_RANK() 等函数和Over函数配合使用
# 例子:
ROW_NUMBER() OVER (PARTITION BY a ORDER BY b)
* ROW_NUMBER():生成连续的序号(相同元素序号相同)
* RANk():如两元素排序相同则序号相同,并且会跳过下一个序号;
* DENSE_RANK():如两元素排序相同则序号相同,不会跳过下一个序号
OLAP 分析中常用的几个函数
-- Grouping Sets
-- 在一个GROUP BY查询中,根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UNION ALL
SELECT
a,
b,
COUNT(DISTINCT uuid) AS uv,
FROM t1
GROUP BY a,b
GROUPING SETS (month,day,(month,day))
-- CUBE
-- 在一个GROUP BY查询中,根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UNION ALL
SELECT
a,
b,
COUNT(DISTINCT uuid) AS uv,
FROM t1
GROUP BY a,b
WITH CUBE
--ROLLUP
--是CUBE的子集,以最左侧的维度为主,从该维度进行层级聚合
SELECT
a,
b,
COUNT(DISTINCT uuid) AS uv,
FROM t1
GROUP BY a,b
WITH ROLLUP
上一篇
Hive有搭建集群的必要吗?下一篇
Hive MapJoin相关推荐