ORC和Parquet都是高性能的存储形式,这两种存储格局总会带来存储和性能上的晋升。
1.Parquet
(1)Parquet反对嵌套的数据模型,相似于Protocol Buffers,每一个数据模型的schema蕴含多个字段,每一个字段有三个属性:反复次数、数据类型和字段名,反复次数能够是以下三种:required(只呈现1次),repeated(呈现0次或屡次),optional(呈现0次或1次)。每一个字段的数据类型能够分成两种: group(简单类型)和primitive(根本类型)。
(2)Parquet中没有Map、Array这样的简单数据结构,然而能够通过repeated和group组合来实现的。
(3)因为Parquet反对的数据模型比拟涣散,可能一条记录中存在比拟深的嵌套关系,如果为每一条记录都保护一个相似的树状结可能会占用较大的存储空间,因而Dremel论文中提出了一种高效的对于嵌套数据格式的压缩算法:Striping/Assembly算法。通过Striping/Assembly算法,parquet能够应用较少的存储空间示意简单的嵌套格局,并且通常Repetition level和Definition level都是较小的整数值,能够通过RLE算法对其进行压缩,进一步升高存储空间。
Parquet文件是以二进制形式存储的,是不能够间接读取和批改的,Parquet文件是自解析的,文件中包含该文件的数据和元数据。
2.ORC
(1)ORC文件是自描述的,它的元数据应用Protocol Buffers序列化,并且文件中的数据尽可能的压缩以升高存储空间的耗费;
(2)和Parquet相似,ORC文件也是以二进制形式存储的,所以是不能够间接读取,大数据培训ORC文件也是自解析的,它蕴含许多的元数据,这些元数据都是同构ProtoBuffer进行序列化的;
ORC和Parquet存储的长处有哪些?
(3)ORC会尽可能合并多个离散的区间尽可能的缩小I/O次数;
(4)ORC中应用了更加准确的索引信息,使得在读取数据时能够指定从任意一行开始读取,更细粒度的统计信息使得读取ORC文件跳过整个row group,ORC默认会对任何一块数据和索引信息应用ZLIB压缩,因而ORC文件占用的存储空间也更小;
(5)在新版本的ORC中也退出了对Bloom Filter的反对,它能够进一步晋升谓词下推的效率,在Hive 1.2.0版本当前也退出了对此的反对。