HSQL之窗口-聚合-分析函数
HSQL之窗口, 聚合和分析函数
HSQL是大数据面试中必须具备的能力, 这里将用一个案例串通这三个常用且难点函数. 学习Hsql, 多敲多练, 方能熟能生巧.
1.创建hive表:
create table window_function_temp(uname string, create_time string,pv string);
2.初始化测试数据:
insert overwrite table dw_tmp.window_function_temp
select
split(detail,',')[0] as uname
,split(detail,',')[1] as create_time
,split(detail,',')[2] as pv
from
(selectconcat('测试用户,2019-10-02,7#测试用户,2019-10-05,4#测试用户,2019-10-07,5#测试用户,2019-10-03,6#测试用户,2019-10-04,3#测试用户,2019-10-01,3#测试用户,2019-10-06,4') as ct_str
) t
lateral view explode(split(ct_str,'#')) t2 as detail;
这里扩展一下里面的重要函数:
split()函数是用于切分数据,也就是将一串字符串切割成了一个数组 ;
explode()函数用于打散行的函数(将一行的数据拆分成多行,它的参数必须为map或array)。这个函数常和split()并用
lateral view :全连接. 一个select后面只能获得一个explode产生的视图,如果要显示多个列,则需要将多个视图合并。
3.窗口函数: lead(col,n,default)和 lag(col,n,default)
lead用于统计窗口内往下第n行值第一个参数为列名,第二个参数为往下第n行(可选,默认为1,不可为负数),第三个参数为默认值(当往下第n行为null时候,取默认值,如不指定,则为null)
lag用于统计窗口内往上第n行值第一个参数为列名,第二个参数为往上第n行(可选,默认为1,不可为负数),第三个参数为默认值(当往上第n行为null时候,取默认值,如不指定,则为null)
select
uname
,create_time
,pv
,lead(pv,1,-9999) over (partition by uname order by create_time) as lead_1_pv
,lag(pv,1,-9999) over (partition by uname order by create_time) as lag_1_pv
from dw_tmp.window_function_temp;
4.first_value和last_value
first_value取分组内排序后,截止到当前行,第一个值,这最多需要两个参数。第一个参数是您想要第一个值的列,第二个(可选)参数必须是false默认为布尔值的布尔值。如果设置为true,则跳过空值。
last_value取分组内排序后,截止到当前行,最后一个值,这最多需要两个参数。第一个参数是您想要第一个值的列,第二个(可选)参数必须是false默认为布尔值的布尔值。如果设置为true,则跳过空值。
following: 往后
current row:当前行
unbounded:起点(一般结合preceding,following使用)
unbounded preceding 表示该窗口最前面的行(起点)
unbounded following:表示该窗口最后面的行(终点)
select
uname
,create_time
,pv
,first_value(pv) over (partition by uname order by create_time rows between unbounded preceding and current row) as first_value_pv
,last_value(pv) over (partition by uname order by create_time rows between unbounded preceding and current row) as last_value_pv
from dw_tmp.window_function_temp;
5.聚合函数:count(), sum(), min(), max, avg()
select
uname
,create_time
,pv
,SUM(pv) over (partition by uname order by create_time) as sum_pv_1 --默认情况
,SUM(pv) over (partition by uname order by create_time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as sum_pv_2 --表示从起点到当前行
,SUM(pv) over (partition by uname) as sum_pv_3 --表示窗口内所有行
,SUM(pv) over (partition by uname order by create_time ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as sum_pv_4 --表示起点到终点
,SUM(pv) over (partition by uname order by create_time ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING) as sum_pv_5 --表示前2行到后面1行
from dw_tmp.window_function_temp;
6.分析函数: row_number, rank, dense_rank, cume_dist, percent_rank, ntile
row_number:从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列;通常用于获取分组内排序第一的记录;
rank: 生成数据项在分组中的排名,排名相等会在名次中留下空位
dense_rank: 生成数据项在分组中的排名,排名相等会在名次中不会留下空位
cume_dist: 小于等于当前值的行数/分组内总行数
percent_rank: 分组内当前行的RANK值-1/分组内总行数-1
ntile: NTILE(n) 用于将分组数据按照顺序切分成n片,返回当前切片值,如果切片不均匀,默认增加第一个切片的分布。ntile不支持rows between
select
uname
,create_time
,pv
,ROW_NUMBER() over (partition by uname order by pv) as row_number_pv_1
,RANK() over (partition by uname order by pv) as row_number_pv_2
,DENSE_RANK() over (partition by uname order by pv) as row_number_pv_3
from dw_tmp.window_function_temp;
HSQL之窗口-聚合-分析函数相关推荐
- java Flink滚动时间窗口聚合TumblingProcessingTimeWindows运算例子
整个的思路是: 构造数据源 窗口聚合代码 1. 构造数据源 首先构造数据,新建一个MyData2.java的文件,写入这个MyData2的类 package create_data;import ja ...
- Flink的窗口聚合操作(Time\Count Window)
窗口基本概念:Flink中的窗口是左闭右开的窗口 Flink认为批处理是流处理的一个特例,而窗口window就是从流处理到批处理的一个桥梁,通常来讲窗口就是用来将无线数据流转换为优先数据集,从而在优先 ...
- Flink AggOperatorWholeWin 全窗口聚合函数
全窗口聚合函数(full window functions) 1.先把窗口所有数据收集起来 2.窗口关闭时,遍历所有数据 ProcessWindowFunction 全窗口函数相比累加窗口函数好的优势 ...
- 【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物
原文地址为: [高德地图API]从零开始学高德JS API(三)覆盖物--标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物 摘要:覆盖物,是一张地图的灵魂.有覆盖物的地图,才是完整的 ...
- 【Flink】各种窗口的使用(处理时间窗口、事件时间窗口、窗口聚合窗口)
文章目录 一 Flink 中的 Window 1 Window (1)Window概述 (2) Window类型 a 滚动窗口(Tumbling Windows) b 滑动窗口(Sliding Win ...
- oracle分析函数以及窗口,Oracle分析函数与窗口函数
一.默认窗口与排名函数 最常用的分析函数是排名函数,用于返回当前记录在窗口中的位置.常用的排名函数包括rank().dense_rank().row_number()等.排名函数所对应的窗口函数必须指 ...
- js添加多marker 高德地图_【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物...
摘要:覆盖物,是一张地图的灵魂.有覆盖物的地图,才是完整的地图.在一张地图上,除了底层的底图(瓦片图,矢量图),控件(有功能可操作的工具),最重要最不可缺少的就是覆盖物了.覆盖物有多种,包括,标注.折 ...
- Flink窗口聚合案例(增量聚合、全量聚合)
上面我们time window和count window讨论了聚合,下面我们从另外一个角度对window进行分类,从聚合角度. window的集合操作分为2种:一种是增量聚合,一种时候全量聚合,增量聚 ...
- sql 精读(一)标准 SQL 中的分析函数概念
分析函数针对一组行计算值,并为每行返回一个结果.这与聚合函数不同:聚合函数会为整组行返回一个结果. 分析函数包含一个 OVER 子句,该子句定义了涵盖所要计算行的行窗口.对于每一行,系统会使用 - 选 ...
- mysql开窗函数over_oracle分析函数技术详解(配上开窗函数over())
一.Oracle分析函数入门 分析函数是什么? 分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计 ,并且每一组的每一行都可以返回 ...
最新文章
- 用JS查看修改CSS样式(cssText,attribute('style'),currentStyle,getComputedStyle)
- wtl单文档选项_Vite 中文文档翻译
- HDU4082(相似三角形的个数)
- zone.js在bootstrap阶段对window对象里一些标准方法的注入逻辑
- const int *p与int *const p的区别
- svn拷贝一个项目作为新项目
- python自动测试模型_Selenium+Python 自动化测试模型
- Flash存储的故事
- ubuntu 18.04 gnome shift键失灵
- 【微信小程序云开发 云数据库 云函数 云存储】
- 去掉台电U盘加密大师
- maven 添加外部jar包到本地仓库
- Java线程(五):Executors、ThreadFactory
- Instant类使用
- java桌面端开发为什么没就行起来,大部分人选qt,winform,electron?
- ESP32 开发笔记(四)littleVGL LVGL 控件学习 Arc 弧形控件
- 48个值得推荐的免费英文有声读物网站
- excel打开之后很小
- 保姆级zookeeper集群搭建(leader+follower模式)
- 电脑同时登录多个微信
热门文章
- Verilog基础语法(一)
- 正交性原理与维纳霍夫(正则)方程
- 【操作系统】Ubuntu 16 编译链接 .cpp 和 .asm 文件
- idea Translation 使用有道翻译
- Arduino DY-SV17F自动语音播报
- 计算机基础多选试题及答案,计算机基础试题及答案
- WinDriver高级编程
- 【2021版】想要专升本你不得不看的全干货_吐血整理_专升本_计算机文化基础(四)
- caxa自动保存的文件在哪里_怎样删除CAXA的临时文件
- 服务器lsass系统错误,急急急开机出现lsass.exe系统错误系统资源不够无法完成AP? 爱问知识人...