Apache Parquet 介绍与选型指南

基于官网文档与 Maven Central 梳理 Apache Parquet 列式格式的规范与多语言实现版本基准、文件结构与编码特性、快速上手与 ORC/Avro 量化选型对比,查询日期 2026-10-18

Apache ParquetApache ParquetParquet2026/10/18

Apache Parquet 介绍与选型指南

一、信息基准

1.1 基本信息

  • 查询日期:2026-10-18
  • 本文基准对象:Apache Parquet——开源的列式数据文件格式(file format),规范与多语言实现分离发布,故本文不挂单一版本号,以"组件-版本基准表"给出各实现基准
  • 维护方:Apache Software Foundation(Apache Parquet 项目)
  • 开源许可:Apache License 2.0
  • 规范承载:格式规范(parquet.thrift IDL)托管于 parquet-format 仓库,官网文档页明确说明

1.2 组件-版本基准表

组件最新稳定版说明与依据
parquet-format(格式规范)2.14.0Maven Central org.apache.parquet:parquet-format 元数据 latest/release 均为 2.14.0,查询日期 2026-10-18
parquet-java(原 parquet-mr,Java 实现)1.18.1Maven Central org.apache.parquet:parquet-column 元数据 latest/release 均为 1.18.1,工件目录时间 2026-08-31;官方 README 注明该仓库为 Parquet 的 Java 实现
Apache Arrow(C++ parquet 实现)随 Apache Arrow 发布官方实现状态页将 arrow(C++,cpp/src/parquet)列为参考实现
arrow-go(Go 实现)随 Apache Arrow Go 发布官方实现状态页列出 arrow-go/tree/main/parquet
arrow-rs(Rust 实现)随 Apache Arrow Rust 发布官方实现状态页列出 arrow-rs 的 parquet 模块
其他实现—官方实现状态页另列 ClickHouse、cudf、hyparquet、duckdb、polars、DataHaskell 等,版本随各项目发布

1.3 版本依据与官方来源清单

  • parquet-java 与 parquet-format 版本均经 Maven Central maven-metadata.xml 于 2026-10-18 交叉核验。
  • 实现清单与特性支持矩阵引自官网 Documentation → Implementation status 页(页面最近修改 2025-10-28)。
来源地址用途
官网https://parquet.apache.org/格式定位与文档入口
格式文档https://parquet.apache.org/docs/规范、概念与实现状态
实现状态页https://parquet.apache.org/docs/file-format/implementationstatus/各语言实现与特性矩阵
parquet-java 仓库https://github.com/apache/parquet-javaJava 实现与构建要求
Maven Centralhttps://repo1.maven.org/maven2/org/apache/parquet/版本交叉核验

二、软件概述

2.1 软件定位

Apache Parquet 官网定义:开源的列式数据文件格式(column-oriented data file format),面向高效的数据存储与检索,提供高性能压缩与编码方案以处理海量复杂数据,被众多编程语言与分析工具支持。它不是可执行程序或服务,而是与语言无关的存储格式规范加多语言实现,因此兼容性核心在于"格式规范版本 × 各实现版本"两个口径。

2.2 理论来源

官方 README 指出 Parquet 采用 Dremel 论文描述的 record shredding and assembly 算法表示嵌套结构,因此能在扁平列存之上表达嵌套 schema。

三、核心架构

3.1 分层文件结构

Parquet 文件自上而下为:文件头(magic)、若干行组(row group)、文件尾(footer)。每个行组内按列切分为列块(column chunk),列块再由页(page)组成;footer 以 Thrift 结构记录 schema 与各列块的编解码、统计信息与偏移,是读取端做谓词下推与裁剪的依据。

3.2 数据模型与嵌套表达

schema 由 parquet.thrift 定义,支持必选/可选/重复字段,借助 Dremel 式 repetition/definition levels 实现嵌套数据的无损拆装;官方文档 Concepts 页提供相关术语表。

3.3 编码与压缩

列数据支持 PLAIN、字典、RLE、Delta 系列等编码与 Snappy、GZIP、ZSTD 等压缩(以规范与实现状态页为准);各实现的支持程度不同,官网实现状态页给出逐特性矩阵。

3.4 多实现格局

规范仓库与实现仓库分离:Java 参考实现为 parquet-java(原 parquet-mr),C++/Go/Rust 实现随 Apache Arrow 各语言仓库发布,另有 duckdb、ClickHouse、polars 等引擎内置实现。

四、功能特性

4.1 列式存储与高压缩比

同列数据类型一致,压缩与编码效率高,适合宽表与聚合分析场景的存储成本优化。

4.2 嵌套结构支持

以 repetition/definition levels 表达嵌套与重复字段,兼顾列存与复杂 schema。

4.3 谓词下推与裁剪

footer 统计信息(min/max 等)支持扫描时跳过行组与页,减少 IO。

4.4 生态中立

作为 Hadoop 时代延续至今的事实标准列存格式,被 Spark、Flink、Hive、Trino、duckdb、polars 等引擎原生读写(实现状态页佐证)。

4.5 规范演进

格式规范(parquet-format)独立版本化,当前 2.14.0;实现按自身节奏跟进规范特性。

五、快速上手

5.1 Java 依赖(parquet-java 1.18.1)

Java 实现的常用坐标(Maven Central 实查存在,Group ID org.apache.parquet):

<dependency>
    <groupId>org.apache.parquet</groupId>
    <artifactId>parquet-hadoop</artifactId>
    <version>1.18.1</version>
</dependency>

说明:parquet-java 需要 Java 17 或更高版本构建,并依赖 Thrift 编译器(官方 README"Building"一节,还给出了从归档获取 Thrift 0.25.0 并校验签名的步骤)。

5.2 读写路径

官方 README 明确:parquet-format 仓库承载格式规范,parquet-java 是规范在 JVM 侧的实现;应用通常经由上层引擎(如 Spark、Flink)或 Avro/Protobuf Record 层 API 读写 Parquet 文件,具体 API 以 parquet-java 官方 README 与 javadoc 为准。本文为纯官方资料溯源整理,未做本地安装与运行实测。

来源:https://github.com/apache/parquet-java

六、适用场景与限制

6.1 适用场景

  • 数据湖与离线数仓的表存储底座(配合 Iceberg/Delta/Hudi 等表格式);
  • OLAP 批扫分析:列裁剪 + 谓词下推 + 高压缩比显著降低扫描与存储成本;
  • 跨引擎数据交换格式:一次落盘,Spark/Flink/Trino/duckdb 等多引擎直读。

6.2 限制

  • 行级点查与频繁单行更新非其设计目标,更新类负载需上层表格式或 LSM 引擎补位;
  • 嵌套 schema 的写路径比扁平结构更重,深度嵌套会带来 shuffle/组装开销;
  • 各语言实现对规范特性的支持进度不一,选型时需对照官网实现状态页逐特性确认;
  • 格式规范与实现版本双口径演进,升级实现前应确认其支持的规范版本。

七、同类选型对比

7.1 候选说明

同类存储格式候选选取 Apache ORC(列存的另一主流格式)与 Apache Avro(行存的 schema 演进格式),版本数据于 2026-10-18 实查 Maven Central。

7.2 量化对比

维度Apache Parquet(parquet-java 1.18.1 / 规范 2.14.0)Apache ORC(orc-core 2.3.1)Apache Avro(avro 1.12.2)
开源许可Apache-2.0(ASF 项目)Apache-2.0(ASF 项目)Apache-2.0(ASF 项目)
GitHub stars 与最近发版stars 官方未公布;parquet-java 工件 2026-08-31stars 官方未公布;Maven Central 元数据更新 2026-07-16stars 官方未公布;Maven Central 元数据更新 2026-08-17
版本节奏规范与实现双线独立演进,1.x 线稳定2.x 线稳定演进1.x 线稳定演进,patch 活跃
兼容矩阵列存;嵌套表达(Dremel levels);Spark/Flink/Trino/duckdb/polars 等广泛原生支持列存;Hive 生态原生格式,内置轻量索引(stripe 级统计/bloom filter);Hive/Spark 支持成熟行存;schema 演进能力最强,适合消息序列化与流式管道(Kafka 等),分析扫描效率弱于列存

数据来源:repo1.maven.org(org.apache.parquet:parquet-column、org.apache.orc:orc-core、org.apache.avro:avro)、parquet.apache.org 实现状态页,查询日期 2026-10-18。

7.3 选型建议

分析型批量扫描与数据湖底座首选 Parquet 或 ORC(深度 Hive 集成与内置索引可倾向 ORC);消息通道与 schema 演进敏感的流式场景选 Avro;Parquet 在跨引擎中立性与生态宽度上占优,是当前湖仓表格式(Iceberg/Delta/Hudi/Paimon)事实上的默认底层文件格式。

八、参考链接