hive的row_number()、rank()和dense_rank()的区别以及具体使用

 

参考:https://blog.csdn.net/qq_20641565/article/details/52841345?locationNum=5&fps=1

2016年10月17日 20:05:21

阅读数:4931

row_number()、rank()和dense_rank()这三个是hive内置的分析函数,下面我们来看看他们的区别和具体的使用案例。

  • 首先创建一个文件test:

A,1 B,3 C,2 D,3 E,4 F,5 G,6

  •  
  • 然后创建hive表:

create table test_rank(a string,b int) row format delimited fields terminated by ',' stored as textfile;

  • 1
  • load数据到表中

load data local inpath '/usr/java/test' overwrite into table test_rank;

  • 1
  • 执行下面的语句

select a,row_number() over(order by b) row_number,rank() over(order by b) rank, dense_rank() over(order by b) dense_rank from lijie.test_rank;

  • 1
  • 2

结果为:

a row_number rank dense_rank A 1 1 1 C 2 2 2 D 3 3 3 B 4 3 3 E 5 5 4 F 6 6 5 G 7 7 6

由此可见: 

row_number:不管排名是否有相同的,都按照顺序1,2,3…..n 

rank:排名相同的名次一样,同一排名有几个,后面排名就会跳过几次 

dense_rank:排名相同的名次一样,且后面名次不跳跃

实际使用: 

现在有一个需求: 需要加工一张表M 其中要求要A表,B表,C表的数据加工,A和B表连接字段都是唯一值,但是和C表连接的字段不唯一,如果A join B,然后再Join C 这样加工出来的表数据会不准确,这里需求是需要最新的C表中关联字段的数据。 

可以按照如下方法解决(c2是C表的关联字段,通过update_time的降序取最新的那条数据):

select A.xxx, B.xxx, C.xxx, .... from A left outer join B on A.c1 = B.c1 left outer join ( select cc.*,row_number() over(distribute by cc.c2 sort by cc.update_time desc) as rownum from C cc ) C on A.c2 = C.c2 and C.rownum = 1;

  •  

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20641565/article/details/52841345

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

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

相关文章

HDU 1176 免费馅饼 (动态规划、另类数塔)

免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 76293 Accepted Submission(s): 26722 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉…

shiro学习(17):easyui布局测试

工具sublime <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><link href"themes/black/easyui.css" rel"stylesheet" /><link href"themes…

细节差距

2008年过去的了&#xff0c;到现在还是没有空出时间来好好的来写下日志&#xff0c;不是自己没有时间而是自己知道可是由于自己的懒惰一直在推&#xff0c;导致的结果是所有需要做的时间一直在推。 人生路上也许很多时候你有很多的选择&#xff0c;在面临选择的时候怎么样作出选…

对比Oracle和Mysql在锁机制上的类似和差异点

转:https://blog.csdn.net/c332472988/article/details/52804078 InnoDB行锁实现方式 InnoDB行锁是通过给索引上的索引项加锁来实现的&#xff0c;这一点MySQL与Oracle不同&#xff0c;后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着&#xff1…

BUUOJ reverse 刮开有奖

刮开有奖 这是一个赌博程序&#xff0c;快去赚钱吧&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

正则表达式测试工具

这个工具最开始是年前写的&#xff0c;原文见如下地址&#xff1a;写了一个测试正则表达式的小工具 后来快过年的时候一直忙着给票贩子送钱去了&#xff0c;没有把它写完&#xff0c;今天抽空把一些细节的功能完成了一下&#xff0c;感兴趣的朋友可以下载试用&#xff1a;点击…

快速排序的原理以及Java代码

package com.asiainfo.test;import java.util.Arrays;import sun.misc.Sort;public class QKSORT {//基本思路是&#xff1a;选择一个值为key 一般是选择左边第一个为key//先是从右向左找到小于 key 的值 将此值与 key 进行交换&#xff0c;由于key 是一个标记先不用交换 &…

BUUOJ reverse 不一样的flag

不一样的flag 是不是做习惯了常规的逆向题目&#xff1f;试试这道题&#xff0c;看你在能不能在程序中找到真正的flag&#xff01;注意&#xff1a;flag并非是flag{XXX}形式&#xff0c;就是一个’字符串‘&#xff0c;考验眼力的时候到了&#xff01; 注意&#xff1a;得到的 …

shiro学习(18):使用注解实现权限认证和后台管理三

工具idea 先看看数据库 shiro_role_permission 数据 shiro_user shiro_user_role 数据 目录结构 在pom.xml里面添加 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…

摇篮与家园

今天你从你出生的医院回到家里&#xff0c;终于和爸爸妈妈团圆了。   说你"回"到家里&#xff0c;似不确切&#xff0c;因为你是第一次来到这个家。   不对&#xff0c;应该说&#xff0c;你来了&#xff0c;我们才第一次有了一个家。   孩子是使家成其为家的根…

Java中的锁分类

转:http://www.cnblogs.com/qifengshi/p/6831055.html 在读很多并发文章中&#xff0c;会提及各种各样锁如公平锁&#xff0c;乐观锁等等&#xff0c;这篇文章介绍各种锁的分类。介绍的内容如下&#xff1a; 公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁…

shiro学习(19): 拦截器

1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展&#xff1b;所以如果对Filter不熟悉可以参考《Servlet3.1规范》http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工作原理。首先下图是Shiro拦截器的基础类图&#xff1a; 1、NameableFilter Name…

关于云开发新服务“实时数据推送”,你需要了解的全在这了!

“微信小程序工程师邓坤力带你了解如何利用千呼万唤始出来的云开发实时数据推送服务打造生动的小程序和小游戏&#xff01;” 在数据库在小程序云开发中的应用一文中&#xff0c;我们了解到实时数据推送作为云开发即将上线的一项新能力&#xff0c;主要指客户端使用官方SDK发起…

MFC窗体“抽筋”

碰到的这个问题不知道用怎样的词去表达。能反映在屏幕上的就是MFC的窗体不能正常的进入&#xff0c;双击图标后&#xff0c;窗体死在那边&#xff0c;进而程序挂掉。在挂掉之前&#xff0c;窗体是不停的闪烁&#xff0c;就像抽筋一样。 产生问题的背景和条件&#xff1a; 1&…

java实现二分查找-两种方式

转:https://blog.csdn.net/maoyuanming0806/article/details/78176957 二分查找是一种查询效率非常高的查找算法。又称折半查找。 起初在数据结构中学习递归时实现二分查找&#xff0c;实际上不用递归也可以实现&#xff0c;毕竟递归是需要开辟额外的空间的来辅助查询。本文就…

shiro学习(20): 自定义过滤规则

工具idea 先看看数据库 shiro_role_permission 数据 shiro_user shiro_user_role 数据 目录结构 在pom.xml里面添加 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…

css 一些 常用布局

div骨架 Code<div id"header">ss</div> <div id"container"> <div id"content">ss</div> <div id"side">ss</div> </div> <div id"pagefooter"…

BUUOJ reverse SimpleRev (爆破)

SimpleRev SimpleRev(flag需加上flag{}再提交) 注意&#xff1a;得到的 flag 请包上 flag{} 提交 拖到ida 找到关键函数&#xff1a; unsigned __int64 Decry() {char v1; // [rspFh] [rbp-51h]int v2; // [rsp10h] [rbp-50h]int v3; // [rsp14h] [rbp-4Ch]int i; // [rsp18h] …

抽象类和接口的对比

转:http://www.importnew.com/12399.html 参数抽象类接口默认的方法实现它可以有默认的方法实现接口完全是抽象的。它根本不存在方法的实现实现子类使用extends关键字来继承抽象类。如果子类不是抽象类的话&#xff0c;它需要提供抽象类中所有声明的方法的实现。子类使用关键字…

shiro学习(21):动态添加验证规则1

工具idea 先看看数据库 shiro_role_permission 数据 shiro_user shiro_user_role 数据 目录结构 在pom.xml里面添加 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…