需求:假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前2名
数据如下表:
id clsno score
1 c1 20
2 c1 30
3 c1 40
4 c1 50
5 c1 80
11 c1 80
12 c1 60
6 c2 20
7 c2 30
8 c2 40
9 c2 50
10 c2 80
13 c1 90
在sql中可以实现的方式是:SELECT
*
FROM
table
AS
T
WHERE
ID
IN
(
SELECT
TOP
2
ID
FROM
table
WHERE
clsno
=
T.clsno
ORDER
BY
score
DESC
)
在hive中没有in这个函数,所以需要别的方式实现。
定义一个rank函数:
package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
public final class Rank extends UDF{
private int counter;
private String last_key;
public int evaluate(final String key){
if ( !key.equalsIgnoreCase(this.last_key) ) {
this.counter = 0;
this.last_key = key;
}
return this.counter++;
}
}
加入$HIVE_HOME/lib/hive-serde-1.7.jar:$HIVE_HOME/lib/hive-
exec
.jar:$HADOOP_HOME/hadoop-core.jar打成一个jar包Rank.jar
hive>add jar Rank.jar;
hive>create temporary function rank as 'com.example.hive.udf.Rank';
hive>select clsno,rank(clsno),id,score from (select clsno,id,score from byl_topn_test distribute by clsno sort by clsno,score desc)a;
得到结果:
取各科成绩中rank值小于2的记录即可。
英文原文链接:http://www.findnwrite.com/musings/extract-top-n-records-in-each-group-in-hadoophive/
- 大小: 12.1 KB
分享到:
相关推荐
hive不直接支持分组取TopN的操作,需要自定义udf函数打成jar包添加到hive运行环境中
hive中分组取topN、row_number、rank和dense_rank使用介绍
hive udaf 实现按位取与或 hive udaf 实现按位取与或 hive udaf 实现按位取与或
部分普通sql查询在hive中的实现方式详细说明;
用于多行合并和分组limit输出的udf工具包,已编译配置好,直接调用即可
hive hive hive hive hive hive hive hive hive hive hive hive
Apache Hive 是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供...
02_Hive表批量加载数据的脚本实现(一) 03_Hive表批量加载数据的脚本实现(二) 04_HIve中的case when、cast及unix_timestamp的使用 05_复杂日志分析-需求分析 06_复杂日志分析-需求字段讲解及过滤 07_复杂日志分析...
Hive原理与实现 详细介绍了hive的原理
Hive中SQL详解
hive实现并发机制:hive里,同一sql里,会涉及到n个job,默认情况下,每个job是顺序执行的。 如果每个job没有前后依赖关系,可以并发执行的话,可以通过设置该参数 set hive.exec.parallel=true,实现job并发执行...
pyflink将mysql数据直接插入hive,由此可以延伸出pyflink实现hive关联mysql
大数据hive实现原理.zip
(” n”)以及读取文件数据的方法( Hive 中默认有三个文件格式 TextFile , SequenceFile 以及 RCFile )。由于在加载数据的过程中,不需要从用户数据格式到 Hive 定义的数据格式的转换,因此, Hive 在加载的...
如果系统语言不是utf-8的话,通过jdbc调用hive的数据时,中文会是乱码,通过修改jdbc包加上utf8标识后就好了,这个是改好了的包
1.数据迁移的过程中,由于hive的Null值存储为"\N",Mysql存储为NULL值,二者转换时需要注意,再数据迁移json模板中,"nullFormat": "\\N", 该配置信息就是解决了数据迁移是存在的Null值。 2.如果hive中没有数值DataX...
pdf文件讲述hive实现原理,图文并茂。
· 将数据载入表中以及从表中抽取数据,并使用查询、分组、过滤、连接和其他常规查询方法。 · 获得创建用户自定义函数(UDF)的最佳方法。 · 了解应该使用的Hive模式以及应该避免的反模式。 · 将Hive和其他数据...
二、Distribute by 五、Cluster by 六、如何使用sort by实现全局排序
《Hive编程指南》是一本Apache Hive的编程指南 旨在介绍如何使用Hive的SQL方法 HiveQL来汇总 查询和分析存储在Hadoop分布式文件系统上的大数据集合 全书通过大量的实例 首先介绍如何在用户环境下安装和配置Hive 并对...