天天看点

parquet参考parquet

参考

大数据开源列式存储引擎Parquet和ORC

新型列式存储格式 Parquet 详解

读写parquet格式文件的几种方式

Parquet file optional field does not exist

parquet

列存

列存使用场景:数据列很多,且每次操作仅针对若干列的情景

parquet数据存储

schema描述存储结构

有group和primitive两种,用以表示嵌套类型

group 复杂类型,基本处于中间节点,并不存储数据,为虚拟节点

primitive 基本类型,int,String之类,处于叶子节点,存储具体数据

字段属性

required 必须出现1次

repeted 可以出现0次或多次

optional 可以出现0次或1次

数据模型(repetition && definition)

repetition level:表示该数值是在那一层开始出现重复的;0表示一个新的记录;required & optional 无重复含义, 无需该定义;在写入的时候将其理解为该节点和路径上的哪一个repeated节点是不共享的,读取的时候将其理解为需要在哪一层创建一个新的repeated节点,这样的话每一列最大的repeated level值就等于路径上的repeated节点的个数(不包括根节点)

definition level:表示在此路径上有多少可选的field被定义了;required 必须有数据,无需该字段;

(R,D,value)[R表示repetition level;D表示definition level]

文件格式

行组(row group);列块(Column Chunk);页(Page)

parquet与orc对比

parquet能够更好的支持嵌套结构,其最初的设计动机就是存储嵌套式数据,如json,thrift,Protocolbuffer等,将这类数据存储成列式格式

其他方面似乎orc的性能更好

比较方面 Parquet orc
发展状态 目前都是Apache开源的顶级项目,列式存储引擎
开发语言 Java java
主导公司 Twitter/Cloudera Hortonworks
列编码 支持多种编码,字典,RLE,Delta等 支持主流编码,与Parquet类似
ACID 不支持 支持ACID事务
修改操作(update,delete等) 不支持 支持
支持索引(统计信息) 粗粒度索引,bolck/group/chunk级别统计信息 粗粒度索引,file/Stripe/row级别
查询性能 orc稍好
数据压缩能力 orc好一些
支持的查询引擎 Apache Drill/impala Apache hive

在mapreduce中简单使用parquet

继续阅读