parquet基本原理
所属分类 bigdata
浏览量 1242
数据的接入、处理、存储与查询
高效的压缩编码,用于降低存储成本
高效的读取能力,用于支撑快速查询
Parquet特点
列式存储,面向分析
自带Schema
具备Predicate Filter特性
表
a |b |c
a1|b1|c1
a2|b2|c2
a3|b3|c3
row layout
a1 b1 c1 | a2 b2 c2 | a3 b3 c3
column layout
a1 a2 a3 | b1 b2 b3 | c1 c2 c3
MySQL Elasticsearch等,为了提高查询性能,在数据写入时建立索引。
存放在HDFS 上的数据是直接以文件形式存储的,实现快速查询的三种手段
只加载需要的数据
Partition Pruning 根据某些字段 数据分区,查询时指定分区条件
Column Projection 查询时指定需要返回的字段
Predicate Filter
Parquet文件结构
Header DataBlock Footer
文件的首尾各有一个内容为PAR1的Magic Number,用于标识这个文件为Parquet文件。
Data Block 由多个Row Group组成 每个Row Group包含一批数据。
假设一个文件有1000行数据,切分成了两个Row Group,每个存500行数据。
Row Group由多个Column Chunk组成,Column Chunk的个数等于列数。
Column Chunk 数据按照Page为最小单元来存储
根据内容分为Data Page和Dictionary Page
多个Row Group可以实现数据的并行加载
不同Column Chunk用来实现列存储
进一步分割成Page,可以实现更细粒度的数据访问
Footer 由 FileMetadata FooterLength和MagicNumber三部分组成
Footer Length 4字节
Magic Number同样是PAR1
FileMetada
Schema 和 每个RowGroup的Metadata
每个RowGroup的Metadata Column的Metadata
每个Column Metadata包含 Encoding Offset Statistic 等
Predicate Pushdown Filter
将过滤条件提前执行,过滤掉不满足条件的文件
数值数据
Column Metada中,有该Column Chunk中数据的Range信息: Max和Min
将过滤条件与Range信息进行对比, 判断是否需要加载该文件的数据
字符数据
字典编码
根据字符编码过滤
Column Metada Dictionary Page
Parquet工具
parquet-mr parquet-tools
java -jar ./parquet-tools-xxx.jar meta xxx.parquet
bigdata-file-viewer
A cross-platform (Windows, MAC, Linux) desktop application to view common bigata binary format like Parquet, ORC, AVRO, etc.
https://github.com/Eugene-Mark/bigdata-file-viewer
java -jar ./BigdataFileViewer-1.2-SNAPSHOT-jar-with-dependencies.jar
you're recommended to download release v1.1.1 to if you just want to view local bigdata binary files,
it's lightweight without dependency to AWS SDK, Azure SDK, etc.
https://github.com/Eugene-Mark/bigdata-file-viewer/releases/tag/v1.1.1
上一篇
下一篇
H2 MVStore Log Structured Storage
H2 limits
列式存储引擎Parquet和ORC比较
H2数据库使用
ORC文件格式
flink基础