Hive分析窗口函数 NTILE,ROW_NUMBER,RANK,DENSE_RANK

本文中介绍前几个序列函数,NTILE,ROW_NUMBER,RANK,DENSE_RANK,下面会一一解释各自的用途。
Hive版本为 apache-hive-0.13.1
数据准备:

    cookie1,2015-04-10,1cookie1,2015-04-11,5cookie1,2015-04-12,7cookie1,2015-04-13,3cookie1,2015-04-14,2cookie1,2015-04-15,4cookie1,2015-04-16,4cookie2,2015-04-10,2cookie2,2015-04-11,3cookie2,2015-04-12,5cookie2,2015-04-13,6cookie2,2015-04-14,3cookie2,2015-04-15,9cookie2,2015-04-16,7CREATE EXTERNAL TABLE lxw1234 (cookieid string,createtime string, --daypv INT) ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','stored as textfile location '/tmp/lxw11/';DESC lxw1234;cookieid STRINGcreatetime STRINGpv INThive> select * from lxw1234;OKcookie1 2015-04-10 1cookie1 2015-04-11 5cookie1 2015-04-12 7cookie1 2015-04-13 3cookie1 2015-04-14 2cookie1 2015-04-15 4cookie1 2015-04-16 4cookie2 2015-04-10 2cookie2 2015-04-11 3cookie2 2015-04-12 5cookie2 2015-04-13 6cookie2 2015-04-14 3cookie2 2015-04-15 9cookie2 2015-04-16 7

NTILE
NTILE(n),用于将分组数据按照顺序切分成n片,返回当前切片值
NTILE不支持ROWS BETWEEN,比如 NTILE(2) OVER(PARTITION BY cookieid ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)
如果切片不均匀,默认增加第一个切片的分布

SELECTcookieid,createtime,pv,NTILE(2) OVER(PARTITION BY cookieid ORDER BY createtime) AS rn1,        --分组内将数据分成2片NTILE(3) OVER(PARTITION BY cookieid ORDER BY createtime) AS rn2, --分组内将数据分成3片NTILE(4) OVER(ORDER BY createtime) AS rn3 --将所有数据分成4片FROM lxw1234ORDER BY cookieid,createtime;cookieid day pv rn1 rn2 rn3-------------------------------------------------cookie1 2015-04-10 1 1 1 1cookie1 2015-04-11 5 1 1 1cookie1 2015-04-12 7 1 1 2cookie1 2015-04-13 3 1 2 2cookie1 2015-04-14 2 2 2 3cookie1 2015-04-15 4 2 3 3cookie1 2015-04-16 4 2 3 4cookie2 2015-04-10 2 1 1 1cookie2 2015-04-11 3 1 1 1cookie2 2015-04-12 5 1 1 2cookie2 2015-04-13 6 1 2 2cookie2 2015-04-14 3 2 2 3cookie2 2015-04-15 9 2 3 4cookie2 2015-04-16 7 2 3 4

 比如,统计一个cookie,pv数最多的前1/3的天

   SELECTcookieid,createtime,pv,NTILE(3) OVER(PARTITION BY cookieid ORDER BY pv DESC) AS rnFROM lxw1234;--rn = 1 的记录,就是我们想要的结果cookieid day pv rn----------------------------------cookie1 2015-04-12 7 1cookie1 2015-04-11 5 1cookie1 2015-04-15 4 1cookie1 2015-04-16 4 2cookie1 2015-04-13 3 2cookie1 2015-04-14 2 3cookie1 2015-04-10 1 3cookie2 2015-04-15 9 1cookie2 2015-04-16 7 1cookie2 2015-04-13 6 1cookie2 2015-04-12 5 2cookie2 2015-04-14 3 2cookie2 2015-04-11 3 3cookie2 2015-04-10 2 3

ROW_NUMBER

ROW_NUMBER() –从1开始,按照顺序,生成分组内记录的序列
–比如,按照pv降序排列,生成分组内每天的pv名次
ROW_NUMBER() 的应用场景非常多,再比如,获取分组内排序第一的记录;获取一个session中的第一条refer等。

  SELECTcookieid,createtime,pv,ROW_NUMBER() OVER(PARTITION BY cookieid ORDER BY pv desc) AS rnFROM lxw1234;cookieid day pv rn-------------------------------------------cookie1 2015-04-12 7 1cookie1 2015-04-11 5 2cookie1 2015-04-15 4 3cookie1 2015-04-16 4 4cookie1 2015-04-13 3 5cookie1 2015-04-14 2 6cookie1 2015-04-10 1 7cookie2 2015-04-15 9 1cookie2 2015-04-16 7 2cookie2 2015-04-13 6 3cookie2 2015-04-12 5 4cookie2 2015-04-14 3 5cookie2 2015-04-11 3 6cookie2 2015-04-10 2 7

RANK 和 DENSE_RANK
—RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位
—DENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位

 SELECTcookieid,createtime,pv,RANK() OVER(PARTITION BY cookieid ORDER BY pv desc) AS rn1,DENSE_RANK() OVER(PARTITION BY cookieid ORDER BY pv desc) AS rn2,ROW_NUMBER() OVER(PARTITION BY cookieid ORDER BY pv DESC) AS rn3FROM lxw1234WHERE cookieid = 'cookie1';cookieid day pv rn1 rn2 rn3--------------------------------------------------cookie1 2015-04-12 7 1 1 1cookie1 2015-04-11 5 2 2 2cookie1 2015-04-15 4 3 3 3cookie1 2015-04-16 4 3 3 4cookie1 2015-04-13 3 5 4 5cookie1 2015-04-14 2 6 5 6cookie1 2015-04-10 1 7 6 7rn1: 15号和16号并列第3, 13号排第5rn2: 15号和16号并列第3, 13号排第4rn3: 如果相等,则按记录值排序,生成唯一的次序,如果所有记录值都相等,或许会随机排吧。

转发:http://www.aboutyun.com/thread-12834-1-1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(5):深入了解网站开发

要了解web前后端的区别,首先必须得清楚什么是web前端和web后端。 首先:web的本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思。现广泛译作网络、互联网等技术领域。表现为三种形式,即超文本(hypertext)、超媒体(hypermed…

实战 IE8 开发人员工具

今天整理我收藏的漫画的时候发现 风云3 少了两集(486、487),这对于收藏者来说基本是不可忍受的; 从风云一到三,应该一集也不能少的; 决定上网去找找,不过溜达一圈常去的分享论坛,由于…

spring----Bean的生命周期和循环依赖

循环依赖&#xff1a; A类引用了B&#xff0c;B类引用了A&#xff0c;像这种循环着依赖就是循环依赖&#xff1b; 对于这种配置不会报错 <bean id"instanceA" class"com.zy.entities.InstanceA"><property name"instanceB" ref"in…

SQL count和case when配合统计给定条件下不重复的记录数

Iamlaosong文 1、我们知道&#xff0c;SQL语句中用count函数统计记录数量&#xff0c;配合distinct关键字可以统计非重复的记录数量。例如&#xff1a; select count(*), count(city_name), count(distinct city_name) from tb_county 查询结果是&#xff1a; 2534 2534 …

前端学习(6):javascript简介

我们需要思考以下六个问题&#xff1a; 1、javaScript是什么&#xff1f; 2、javaScript的用途是什么&#xff1f; 3、javaScript和ECMAScript的关系是什么&#xff1f; 4、javaScript由哪几部分组成&#xff1f; 5、javaScript的执行原理是怎样的&#xff1f; 6、在页面…

提高系统性能

1.Cache缓存 对象有生命周期&#xff0c;有容量限制&#xff0c;适合保存有状态属性的对象。 有状态的session bean运行在EJB容器的Cache中 2.Pool池 对象池&#xff0c;实现对象的大量并行访问 无状态的session bean运行在EJB容器的Pool中。转载于:https://www.cnblogs.com/cx…

2019 徐州icpc网络赛 E. XKC's basketball team

题库链接&#xff1a; https://nanti.jisuanke.com/t/41387 题目大意 给定n个数&#xff0c;与一个数m&#xff0c;求ai右边最后一个至少比ai大m的数与这个数之间有多少个数 思路 对于每一个数&#xff0c;利用二分的方法求他右边大于等于aim的数的最后一个值。 关键在于怎么二…

Hive中COUNT的高级用法(条件过滤等)

在HIVE中&#xff0c;除了COUNT(*)外&#xff0c;COUNT还可以有很多高级用法。 SELECTtype, count(*), count(DISTINCT u), count(CASE WHEN plat1 THEN u ELSE NULL END), count(DISTINCT CASE WHEN plat1 THEN u ELSE NULL END), count(CASE WHEN (type2 OR type6) THEN u E…

前端学习(7):web的三大技术

HTML(5) 是一门标记型语言&#xff0c;主要由一些具备特殊含义的标签构成&#xff08;建筑物结构&#xff09; 所谓HTML是“超文本标记语言”的英文缩写。我们上网所看到网页&#xff0c;多数都是由HTML写成的。“超文本”是指页面内可以包含图片、链接&#xff0c;甚至音乐、…

SQL 关键字

Table B-1 列出了所由在 SQL 标准和 PostgreSQL 7.2 里是关键字的记号&#xff0e; 你可以在 Section 1.1.1 里找到 相关的背景信息&#xff0e; SQL 里有保留字(保留)和 非保留字之分&#xff0e;根据标准&#xff0c; 保留字是那些真正的关键字&#xff1b;我们决不能用它们…

scala的foreach和for

一句印象深刻的话&#xff0c;Alan Kay&#xff08;Smalltalk发明者&#xff09;说得一句话&#xff1a;“I’m not against types, but I dont know of any typesystems that arent a complete pain, so I still like dynamic typing”。 并不是静态类型不好&#xff0c;只是静…

Fedora7 安装完全过程

操作系统课要用Fedora7 安装配置真是一把辛酸泪呀..... 首先是找镜像文件&#xff08;这个就找了好久.....&#xff09;&#xff1a; https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/7/Fedora/x86_64/iso/ 下载下来&#xff08;很久&#xff09;之后&a…

前端学习(8):HTML的基本属性和结构

一、HTML文档结构 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <title>css样式优先级</title> </head> <body> </body> </html> <!DOCTYPE html>声明为HTML5文…

Scala:Function1、Function2

Function1 带一个参数的方法&#xff0c;声明时&#xff0c;它需要两个泛型参数&#xff0c;第一个是传入的数据类型&#xff0c;第二个表示返回的数据类型&#xff0c;Function1是 trait &#xff0c;它有一个apply方法&#xff0c;用来对输入参数进行处理了&#xff0c;使用…

如何更sql sever数据库表的所有者

dbo不是表caseTable的所有者,就无法在查询分析器里执行各种sql语句,提示:服务器: 消息 208&#xff0c;级别 16&#xff0c;状态 1&#xff0c;行 1对象名 caseTable 无效。 表一般默认的所有者是dbo,现在有几个表不是的,所以无法用sa来连接,请问怎么改回为dbo呢? EXEC sp_c…

借助云开发轻松实现后台数据批量导出丨实战

小程序导出数据到excel表&#xff0c;借助云开发后台实现excel数据的保存 我们在开发小程序的过程中&#xff0c;可能会有这样的需求&#xff1a;如何将云数据库里的数据批量导出到excel表里&#xff1f; 这个需求可以用强大的云开发轻松实现&#xff01; 这里需要用到云函数&a…

Storm的ack机制在项目应用中的坑

正在学习storm的大兄弟们&#xff0c;我又来传道授业解惑了&#xff0c;是不是觉得自己会用ack了。好吧&#xff0c;那就让我开始啪啪打你们脸吧。 先说一下ACK机制&#xff1a; 为了保证数据能正确的被处理, 对于spout产生的每一个tuple, storm都会进行跟踪。 这里面涉及到ac…

云开发数据库VS传统数据库丨云开发101

云开发数据库与传统数据库的不同 在小程序云开发中&#xff0c;最核心的便是三大组件&#xff1a;数据库、云存储和云函数&#xff0c;从今天开始&#xff0c;我们将开始隔日更的专栏文章&#xff0c;云开发101&#xff0c;在第一周&#xff0c;我们将从最最核心的数据库开始说…

前端学习(10):HTML语义化

我理解的HTML语义化 经过查看别人博文中的一些描述&#xff0c;我将HTML的语义化总结为&#xff1a; 用最恰当的标签来标记内容。 该如何理解呢&#xff1f;比如需要加入一个标题&#xff0c;这个标题的字体比正文的要大写&#xff0c;还要加粗。能够实现这种效果的方法有很多…

大尾端 小尾端

提到体系结构时&#xff0c;经常遇到大小尾端的概念&#xff0c;这里做个总结。 big endian&#xff1a;大尾端&#xff0c;也称大端&#xff08;高位&#xff09;优先存储。little endian&#xff1a;小尾端&#xff0c;也称小端&#xff08;低位&#xff09;优先存储。如下00…