1 hive数据源构造
先来看hive record cursor的构造栈
从图中可以看到,读取hive的数据时,会构造一个ColumnBinaryHiveRecordCursor,这个应该是rcfile这类列式存储专有的读取格式,如果是sequencefile或者textfile,不是这个。具体是哪个呢,可以看看这个cursor的基类是HiveRecordCursor,这个基类的子类有:
可见,其中的ColumnarBinaryHiveRecordCursor,是专门针对rcfile或者orcfile的,ColumnarTextHiveRecordCursor和GenericHiveRecordCursor具体是处理什么格式不清楚。
2 数据迭代读取
主要调用的是这个类的advanceNextPosition方法,这个方法会构造一个RCFileReader,并最终会调用RCFile类的getCurrentRow方法,如下图所示:
rcfile是列式存储,所以这里可以只读取对应的列值,但是读取时是一次读取一大块,这样可以减少io的次数,具体代码如下:</