ORC 全称是Optimized Row Columnar,意思是优化的RC file,优化行列式。
ORC 文件格式提供了一个很高效的方式来存储hive数据。它旨在克服其他hive文件格式的限制。当hive读取、写入和处理数据时,使用ORC文件可以提高性能。
和RCFile格式相比,ORC文件格式有很多优点,例如:
①每个任务的输出都是一个单独的文件,这减少了NameNode的负载
②hive类型支持datetime、decimal和复杂类型(struct、list、map和union)
③轻量级的索引,跳过不传递predicate filtering的行组
④基于数据类型的块模式压缩,integer列是run-length 编码,string列是dictionary 编码
⑤使用单独的RecordReaders 并发读取同一文件
⑥限制了读写所需的内存大小
⑦使用Protocol Buffers存储元数据,允许添加和删除字段
文件结构
ORC 文件包含被称为stripes 的行数据组,以及文件页脚中的辅助信息。在文件的末尾,一个postscript 保存压缩参数和压缩页脚的大小。stripe 大小默认为250MB。大的stripe 可以实现从hdfs 的高效读取。文件页脚包含文件的stripes 列表,每一个stripe 的行数以及各列的数据类型。它还包含列级的聚合,count、min、max h和sum。