hive的窗口函数详解
1.1 hive窗口函数
窗口函数是什么鬼?
窗口函数指定了函数工作的数据窗口大小(当前行的上下多少行),这个数据窗口大小可能会随着行的变化而变化。窗口函数和聚合函数区别?
窗口函数对于每个组返回多行,组内每一行对应返回一行值。
聚合函数对于每个组只返回一行。
1.1.1 在日常的开发中常用那些类型函数??
1、字符串操作函数?split、concat、ifnull、cast
2、聚合函数 : hive适用于分析,所以常用。
3、时间函数 : 数仓的特征随时间变化而变化,所以时间也特别多
4、窗口函数:sum() over() 、 count() over() 、 排名函数
接下来,着重讲解hive的窗口函数。
1.1.2 了解哪些窗口函数,都是什么意思?
sum(col) over() : 分组对col累计求和,over() 中的语法如下
count(col) over() : 分组对col累计,over() 中的语法如下
min(col) over() : 分组对col求最小
max(col) over() : 分组求col的最大值
avg(col) over() : 分组求col列的平均值
first_value(col) over() : 某分区排序后的第一个col值
last_value(col) over() : 某分区排序后的最后一个col值
lag(col,n,DEFAULT) : 统计往前n行的col值,n可选,默认为1,DEFAULT当往上第n行为NULL时候,取默认值,如不指定,则为NULL
lead(col,n,DEFAULT) : 统计往后n行的col值,n可选,默认为1,DEFAULT当往下第n行为NULL时候,取默认值,如不指定,则为NULL
ntile(n) : 用于将分组数据按照顺序切分成n片,返回当前切片值。注意:n必须为int类型。
排名函数:
row_number() over() : 排名函数,不会重复,适合于生成主键或者不并列排名
rank() over() : 排名函数,有并列名次,名次不连续。如:1,1,3
dense_rank() over() : 排名函数,有并列名次,名次连续。如:1,1,2
over(分组 排序 窗口) 中的order by后的语法: 1、物理窗口(真实往上下移动多少行rows between):
CURRENT ROW | UNBOUNDED PRECEDING | [num] PRECEDING AND UNBOUNDED FOLLOWING | [num] FOLLOWING| CURRENT ROW
如: over(partition by col order by rows between 1 preceding and 1 fllowing)
2、 逻辑窗口(满足条件上下多少行):(金融行业、保险行业、p2p等)
range between [num] PRECEDING AND [num] FOLLOWING
如: over(partition by col order by range between 5 preceding and 5 fllowing)
注意:窗口函数一般不和group by搭配使用。
应用: 某天某产品的累计销售额。
物理窗口:
求多维度累计(累计退款金额、累计交易额、累计订单数量)
逻辑窗口:
范围累计环比情况、某值上下加减。
1.1.3 编写sql实现每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数
数据:
userid,month,visits
A,2015‐01,5
A,2015‐01,15
B,2015‐01,5
A,2015‐01,8
B,2015‐01,25
A,2015‐01,5
A,2015‐02,4
A,2015‐02,6
B,2015‐02,10
B,2015‐02,5
A,2015‐03,16
A,2015‐03,22
B,2015‐03,23
B,2015‐03,10
B,2015‐03,1
每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数,结果数据格式如下:
答案:
-- 建表语句
c*reate table visits(
userid string,
month string,
visits int
)
row format delimited fields terminated by ','
;
-- 装载数据语句
load data local inpath '/home/visits' into table visits;
-- 查询语句
select
t.userid,
t.month,
max(visits) over(distribute by t.userid sort by t.month) max_visits,
sum(visits) over(distribute by t.userid sort by t.month) total_visits,
t.visits
from (select
vs.userid,
vs.month,
sum(visits) visits
from visits vs
group by vs.userid,vs.month) t
;
查询结果:
OK
A 2015‐01 33 33 33
A 2015‐02 33 43 10
A 2015‐03 38 81 38
B 2015‐01 30 30 30
B 2015‐02 30 45 15
B 2015‐03 34 79 34
注意:
1、月份转换成成时间戳更好
2、子查询不会限制性能,相反更好。
hive的窗口函数咱们就介绍到这儿啦。
hive的窗口函数详解相关推荐
- MySQL/Hive 常用窗口函数详解及相关面试题
目录 一.窗口函数概述: 1.窗口函数的分类 2.窗口函数与普通聚合函数的区别: 二.窗口函数的基本用法 1.基本语法 2.设置窗口的方法 1)window_name 2) partition by ...
- 【Hive】窗口函数详解
文章目录 1 窗口函数概述 2 语法规则 3 窗口聚合函数的使用 4 窗口表达式 5 窗口排序函数 5.1 row_number家族 5.2 ntile函数 6 窗口分析函数 最近工作中经常遇到窗口函 ...
- Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
编者按:HDFS和MapReduce是Hadoop的两大核心,除此之外Hbase.Hive这两个核心工具也随着Hadoop发展变得越来越重要.本文作者张震的博文<Thinking in BigD ...
- hive linux进程数,控制Hive MAP个数详解
控制Hive MAP个数详解 Hive的MAP数或者说MAPREDUCE的MAP数是由谁来决定的呢?inputsplit size,那么对于每一个inputsplit size是如何计算出来的,这是做 ...
- Thinking in BigData(八)大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
纯干货:Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解. 通过这一阶段的调研总结,从内部机理的角度详细分析,HDFS.MapReduce.Hbase.H ...
- 图解大数据 | 海量数据库查询-Hive与HBase详解
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
- [Hive] - Hive参数含义详解
hive中参数分为三类,第一种system环境变量信息,是系统环境变量信息:第二种是env环境变量信息,是当前用户环境变量信息:第三种是hive参数变量信息,是由hive-site.xml文件定义的以 ...
- 大数据技术-hive窗口函数详解
有不少同学一听这个标题,hive窗口函数是什么鬼?没听说过还有窗口函数这个东西啊,其实它的用处可大了,下面听小千慢慢道来. hive窗口函数 窗口函数指定了函数工作的数据窗口大小(当前行的上下多少行) ...
- Hive窗口函数详解
1.概述 (1)窗口函数是一组特殊函数 ①扫描多个输入行来计算每个输出值,为每行数据生成一行结果 ②可以通过窗口函数来实现复杂的计算和聚合 (2)语法 Function (arg1,..., arg ...
最新文章
- TensorFlow集成TensorRT环境配置
- 网页css样式中英对照,css中文样式(含中英文对照表).doc
- DPM2010恢复整个邮箱数据库
- 会场安排问题 http://acm.nyist.net/JudgeOnline/problem.php?pid=14
- [SpringSecurity]框架概述
- python能做什么软件-一篇告诉你为什么人人都应该学点Python?
- 用Not Exists 代替Not In
- java学习笔记宋红康版本-01
- linux 指令安装显卡驱动,Linux 16.04 LTS 安装显卡驱动
- java假死_分析java进程假死状况
- 免费的onlineserver工具livezilla
- Docker-禁用userland代理
- 2014游泳记录 01
- HRSID舰船检测数据集标签格式转换,json转为xml
- 聊一下关于面试的话题,只谈共性,不谈个例,一家之言,仅供求职者参考:)
- 嵌入式linux 系统支持usb wifi BL-R8723BT1
- [Ynoi2015]纵使日薄西山
- python四则运算程序_四则运算小程序(Python)
- AliOS-Things+ESP32 BLE篇 (1)BLE peripheral
- Chromium浏览器(CEF)的命令行列表说明
热门文章
- aws s3 静态网站_如何使用AWS S3,CloudFront和命令行管理静态网站
- 作为前端开发,我为何疯狂推荐WebStorm?
- php的数组、排序、查找
- IP54、IP67、IP6K7K、IP6K9K代表什么意思?
- ZOJ 4062 Plants vs. Zombies(二分答案)
- ChinaSoft 论坛巡礼 | 面向可解释人工智能的软件工程方法与技术论坛
- USB OTG基本原理
- Python实现 天天向上的力量(嵩天老师)
- 安装(解密)win10 10074 esd 更新 10162 esd
- jre环境变量配置(jre环境变量配置)