Hive函数row_number实现
来源:互联网 发布:行程路线图制作软件 编辑:程序博客网 时间:2024/06/10 11:37
需求:
查询一批用户最后三次登陆时间,ip数据
理解需求是实现分组取前n个值,实现方式是先按照uid字段升序或倒序,时间字段倒序排序数据集合,然后遍历数据集合,用row_number函数遍历uid字段,相同则row_number值+1,取row_number<=3
row_number实现
import org.apache.hadoop.hive.ql.exec.UDF;public class RowNumber extends UDF { private static int MAX_VALUE = 50; private static String comparedColumn[] = new String[MAX_VALUE]; private static int rowNum = 1; public int evaluate(Object... args) { String columnValue[] = new String[args.length]; for (int i = 0; i < args.length; i++){ columnValue[i] = args[i].toString(); } if (rowNum == 1) { for (int i = 0; i < columnValue.length; i++) comparedColumn[i] = columnValue[i]; } for (int i = 0; i < columnValue.length; i++) { if (!comparedColumn[i].equals(columnValue[i])) { for (int j = 0; j < columnValue.length; j++) { comparedColumn[j] = columnValue[j]; } rowNum = 1; return rowNum++; } } return rowNum++; }}
使用
add jar /xx/xx/user_function/mr-function-1.0.0.jar;create temporary function row_number as 'com.xxx.xxx.RowNumber';SELECT c.user_id,c.time,c.ip FROM(SELECT b.* FROM uids_20150831 a LEFT JOIN (SELECT * FROM login WHERE date >=20150101) b ON a.user_id = b.user_iddistribute BY user_id sort BY user_id ASC,time DESC ) c WHERE row_number(c.user_id)<=3
参考:
http://blog.csdn.net/liuj2511981/article/details/8741276
http://blog.csdn.net/yfkiss/article/details/7885262
http://blog.csdn.net/yfkiss/article/details/7885262
0 0
- Hive函数row_number实现
- Hive UDF实现分析函数row_number
- Hive UDF实现分析函数row_number
- Hive分析函数row_number()
- Hive 内置函数之 ROW_NUMBER
- HIVE中 ROW_NUMBER() OVER() 函数
- sqlserver2000实现row_number()函数
- hive中使用自定义函数(UDF)实现分析函数row_number的功能
- hive中使用自定义函数(UDF)实现分析函数row_number的功能
- hive row_number()内置函数使用例子
- hive函数--排序row_number,rank over
- Hive分析函数row_number() 【分组topk】
- hive分组排序函数-row_number() over&nbs
- [Hive]分析函数 RANK ROW_NUMBER CUME_DIST CUME_DIST
- hive row_number
- hive row_number()
- hive(version 0.11)中的内置函数row_number() over 函数
- HIVE中row_number函数的描述与使用场景
- 仿qq聊天界面
- asp.net如何解决传递中文参数乱码问题
- xml文件解析并显示到Android手机 spinner的应用
- 快速创建九宫格
- HDU 1702 ACboy needs your help again!(模拟 队列 栈)
- Hive函数row_number实现
- Hibernate自学详细笔记
- LeetCode之Best Time to Buy and Sell Stock
- 间隔300ms第一次一个管亮流动一次,第二次两个管亮流动。依次到8个管亮,然后重复此过程
- android传递数据方式2--通过剪切板传数据
- Javascript基础(一)
- 今天又看到了一篇关于程序运行时内存方面的文章,特地来分享一下。
- HDU DFS
- 初进hp感想和目标