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

110 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第13天,在第十三节课中主要了解到了Parquet与ORC:高性能列式存储有关的内容。

一、列存vs行存

数据格式层概述

  • 计算层:各种计算引擎
  • 存储层:承载数据的持久化存储
  • 数据格式层:定义了存储层文件内部的组织格式,计算引擎通过格式层的支持来读写文件

分层视角下的数据形态

  • 存储层:File,Blocks
  • 格式层:File内部的数据布局
  • 计算引擎:Rows+Columes

两种数据查询分析场景:OLTP,OLAP

image.png

OLTP:行式存储格式

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

二、Parquet原理详解

Parquet简介

  • 大数据分析领域使用最广的列存格式
  • Spark推荐存储格式

压缩Compression

  • page完成Encoding以后,进行压缩
  • 支持多种压缩算法

索引Index

  • 和传统的数据库相比,索引支持非常简陋
  • Min-Max Index:记录Page内部Column的min_value和max_value Bloom Filter 排序Ordering:

过滤下推Predicate PushDown

Spark集成-向量化读

  • ParquetFileFormat

深入Dremel数据模型-Repetition Level

三、ORC详解

ORC简介

  • 大数据分析领域使用最广的列存格式之一
  • 出自于Hive项目

数据模型

  • ORC会给包括根节点在内的中间节点都创建一个Colume
  • 嵌套类型或者集合类型支持和Parquet差别较大
  • optional和repeated字段依赖父节点记录额信利息来重新Assembly数据

数据布局

  • 类似Parquet

ACID特性简介

  • 支持Hive Transactions实现,目前只有Hive本身集成
  • 类似Delta Lake/Hudi/iceberg

四、列存演进