赞
踩
Hive将SQL转为MapReduce执行,但是对于简单的查询,使用MapReduce的效率太低,于是开发了fetch功能来避免MR的执行。
网上有大量的文章介绍了如何使用,却少有介绍其原理的,于是自己debug学习了一下整理成笔记分享出来。
由于我使用的是hive的cli进行debug,所以会先进入CliDriver,关于这个环节更详细的介绍可以参考Hive 源码解析之 Hive 基本框架和执行入口
通过FetchOperator的pushRow方法,拿到每一行数据。
刚刚的数据是byteArray,在SelectOperator的process中通过eval[i].evaluate(row)
将byteArray转为了Lazy类型的数据比如下图的LazyInteger/LazyString
读取文件的结果存在ListSinkOperator的res中
遍历res打印到控制台
最后用一张图来总结Hive 的fetch原理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。