hive源码分析--row_number源码分析
来源:互联网 发布:林弯弯网店淘宝网址 编辑:程序博客网 时间:2024/06/11 12:40
前言
row_nubmer使用说明: row_number接收到的数据是已经分区排序的数据, row_number
() OVER (PARTITION
BY
c
ORDER
BY
d)
description = @Description( name = "row_number", value = "_FUNC_() - The ROW_NUMBER function assigns a unique number (sequentially, starting " + "from 1, as defined by ORDER BY) to each row within the partition." ),
代码路径
hive版本:2.1.0
row_number对应的源代码类:org.apache.hadoop.hive.ql.udf.generic.GenericUDAFRowNumber
这个是一个UDAF,hive的udf在FunctionRegistry,对应的包在ql目录下
system.registerGenericUDAF("row_number", new GenericUDAFRowNumber());
源码分析
1、临时聚合结果RowNumberBuffer
定义了一个list、计数器,初始化时new一个list、计数器置为1;incr方法 每次将计数器加一并放到list中。
static class RowNumberBuffer implements AggregationBuffer { ArrayList<IntWritable> rowNums; int nextRow; void init() { rowNums = new ArrayList<IntWritable>(); } RowNumberBuffer() { init(); nextRow = 1; } void incr() { rowNums.add(new IntWritable(nextRow++)); } }
2、iterate方法
调用RowNumberBuffer.incr(),来一条记录进行加1
public void iterate(AggregationBuffer agg, Object[] parameters) throws HiveException { ((RowNumberBuffer) agg).incr(); }
3、terminate
返回最终结果,RowNumberBuffer中的list
public Object terminate(AggregationBuffer agg) throws HiveException { return ((RowNumberBuffer) agg).rowNums; }
1 0
- hive源码分析--row_number源码分析
- hive执行源码分析
- Hive源码分析一
- Hive MetaStore 源码分析
- Hive分析函数row_number()
- hive 执行过程源码分析
- Hive 执行过程源码分析
- Hive执行过程源码分析
- Presto源码分析(hive-rcfile)
- Hive on Spark源码分析
- hive源码结构分析(编译器)
- hive源码结构分析(编译器)
- 关于hive RegexSerDe的源码分析
- 关于hive RegexSerDe的源码分析
- hive源码分析--导入到eclipse
- presto源码分析(hive orc读取)
- presto源码分析(hive的分区处理)
- Hive生成MapReduce任务源码分析
- 可持久化线段树附图解
- HDU1754
- 2549. 【NOIP2011模拟9.4】家庭作业 (Standard IO)
- poj2676 Sudoku
- 阿里数据库关键技术
- hive源码分析--row_number源码分析
- 【VS开发】raw socket 的例子
- IOS截屏,View截图的基本方法
- 请描述下Activity的生命周期
- Eclipse+Maven创建webapp项目<一>
- jzoj 4690. 【GDOI2017模拟8.12】字符串 后缀数组+RMQ
- 如何简单的写出一个侧滑菜单
- OpenCV学习笔记(二)——Mat,图像的新容器
- android之碎片fragment的使用