Parquet与ORC 高性能列式存储|青训营笔记

101 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的的第12天 今天我学习了Parquet与ORC高性能列式存储的相关知识。

1,列存 VS 行存

概述数据格式层的作用和定位,对比列式存储和行式存储的基本原理和使用场景。
计算层:各种计算引擎
存储层;承载数据的持久化存储
数据格式层:定义了存储层文件内部的组织格式,计算引擎通过格式层的支持来读写文件

OLTP VS OLAP

image.png

OLTP:行式存储格式(行存)

image.png

每行的数据在文件上是连续存储的
读取整行数据效率高,单次 IO 顺序读即可
典型系统
关系型数据库:MySQL,Oracle
Key-Value数据库

OLAP:列式存储格式(列存)

每列的数据在文件上是连续存储的
读取整列的效率较高
同列的数据类型一致,压缩编码的效率更好 典型系统
大数据分析系统:SQL-on-Hadoop,数据湖分析
数据仓库:ClickHouse,Greenplum,阿里云 MaxCompute

总结
格式层定义了数据的布局,连接计算引擎和存储服务
OLTP 和 OLAP 场景化差异明显
业务场景决定了技术实现,行存适用于 OLTP,列存适用于 OLAP

2,Parquet 原理详解

详细介绍 Parquet 格式的原理、布局、以及和计算引擎的集成和优化。
Hive Table using Parquet CREATE TABLE lineitem ( l_oorderkey int, l_partkey int, ... ) STORED AS PARQUET TBLPROPERTIES ("parquet.compression"="SNAPPY");

Load Data using SparkSQL
INSERT INTO lineitem SELECT * from tpch10g.lineitem;

3,ORC 详解和对比

介绍另一个常见的列存格式 ORC 的原理,主要和 Parquet 做对比,同时介绍 AliORC 的重点优化。

4,列存演进

介绍更广义场景下的列存,以及更多的列存演进和优化工作。