Apache Parquet 概述
Apache Parquet 是一种开源的、面向列存储的数据文件格式,旨在实现高效的数据存储和检索。 它提供高性能的压缩和编码方案,以处理大规模的复杂数据,并被许多编程语言和分析工具所支持。
本文档包含有关 parquet-java 和 parquet-format 仓库的信息。
parquet-format(Parquet 格式)
parquet-format 仓库托管着 Apache Parquet 文件格式的官方规范,定义了数据的结构和存储方式。该规范包括 Thrift 元数据定义及其他关键组件,对于开发者来说,理解和正确使用 Parquet 文件至关重要。
由于 parquet-format 主要用于存放规范文档,因此该仓库本身不包含源代码。
parquet-java(Parquet Java 实现)
parquet-java(前称 ‘parquet-mr’)是 Apache Parquet 项目的一个子项目,专注于提供 Java 相关的工具来处理 Parquet 文件格式。该仓库包含所有必要的 Java 库和模块,使开发者能够在 Java 应用中读写 Apache Parquet 文件。
parquet-java 主要包括以下内容:
- Java 实现:提供 Apache Parquet 格式的核心 Java 实现,使 Java 应用能够使用 Parquet 文件。
- 工具和 API:包含用于操作 Apache Parquet 文件的各种实用工具和 API,例如数据导入/导出、模式管理(schema management)和数据转换工具。
其他客户端 / 库 / 工具
Parquet 生态系统丰富多样,涵盖了各种工具、库和客户端,每种实现对 Parquet 格式的支持程度可能有所不同。在集成多个 Parquet 实现到工作流中时,务必进行充分测试,以确保不同平台和工具之间的兼容性和性能。
以下是部分 Parquet 实现(非详尽列表):
- Parquet-java
- Parquet C++(Arrow C++ 的子项目) (文档)
- Parquet Go(Arrow Go 的子项目) (文档)
- Parquet Rust
- cuDF
- Apache Impala
- DuckDB
- fastparquet(Python 实现的 Apache Parquet 库)
最佳实践
-
选择合适的 Parquet 实现
在不同编程语言和工具中选择适合的 Parquet 库。例如,在 Java 中推荐使用parquet-java,在 Python 中推荐fastparquet或pyarrow,而在高性能计算环境中可以考虑Parquet C++。 -
优化数据存储和读取性能
- 使用合适的压缩格式(如 Snappy、Zstd、Gzip)来减少存储空间并提升读取效率。
- 利用列存储特性,只读取所需的列,减少 I/O 开销。
- 使用合适的分区策略,对大规模数据进行分区存储,提高查询效率。
-
确保不同 Parquet 实现的兼容性
- 不同的 Parquet 库对某些功能的支持可能不同,例如
fastparquet可能不支持所有的 Parquet 格式特性,因此在多工具集成时需进行兼容性测试。 - 使用标准的 Parquet 规范进行数据存储,避免使用特定库的非标准扩展格式。
- 不同的 Parquet 库对某些功能的支持可能不同,例如
-
模式(Schema)管理
- 在 ETL 过程中,保持 Parquet Schema 的一致性,避免数据类型冲突。
- 适当利用嵌套结构(如
LIST和MAP类型)优化复杂数据存储。
-
充分利用 Parquet 的统计信息
- Parquet 存储了每个数据块的统计信息,如最大值、最小值等,可以用于跳过无关数据,提高查询性能。
- 在查询引擎(如 Apache Impala 或 DuckDB)中启用 Predicate Pushdown(谓词下推),减少不必要的数据扫描。
Apache Parquet 提供了强大的数据存储和查询优化能力,选择合适的工具和实践,可以极大地提高大数据处理的效率。
查看全部文档
Apache Parquet 基础概念(Concepts)
本文档介绍 Apache Parquet 文件格式的相关概念和术语。包括块、文件、行组、列块和页面等概念。
Apache Parquet 中文文档
欢迎阅读 Apache Parquet 的文档。在这里,您可以找到有关 Parquet 文件格式的信息,包括规范和开发资源。
Parquet 布隆过滤器(Bloom Filter)
Parquet 布隆过滤器是一种紧凑的数据结构,用于近似存储一个集合。它可以回答成员查询,返回 ‘绝对不存在’ 或 ‘可能存在’ 的结果,其中假阳性(false positive)的概率可以在初始化过滤器时配置。布隆过滤器不会产生假阴性(false negatives)。
Parquet 文件格式配置
本页面包含有关 Parquet 文件格式配置的信息。
Parquet 校验和 (Checksumming)
在 Parquet 中,各种类型的页面(Pages)都可以单独进行校验和计算。这种机制允许在 HDFS 文件层面禁用校验和,以更好地支持单行查找(single row lookups)。
Parquet 列块(Column Chunks)
Parquet 列块由一个个连续写入的页面(pages)组成。这些页面共享一个通用的页头(header),读取器可以跳过不感兴趣的页面。页面的数据紧随其头部,并且可以进行压缩和/或编码。压缩和编码方式在页面的元数据(metadata)中指定。
Parquet 数据页压缩
Parquet 数据页压缩允许对字典页和数据页中的数据块进行压缩,以提高存储效率。本文介绍 Parquet 支持的压缩编解码器及最佳实践。
Parquet 编码(Encodings)
Parquet 模块化加密
Parquet 文件中的敏感信息可以通过模块化加密机制进行保护,该机制能够对文件数据和元数据进行加密和认证,同时仍然支持常规的 Parquet 功能(列投影、谓词下推、编码和压缩)。
Parquet 错误恢复
Parquet 数据页(Data Pages)
本页面介绍 Parquet 数据页的结构和最佳实践。
Parquet 文件可扩展性
Parquet 实现状态
本页面总结了不同 Parquet 实现所支持的功能。
Parquet 嵌套编码(Nested Encoding)
本文介绍 Parquet 文件格式中嵌套列的编码方式,包括定义级别和重复级别的作用,以及最佳实践。
Parquet 空值(Nulls)
Apache Parquet 中空值(NULL)的存储和处理方式
Parquet 页面索引(Page Index)
本文档描述了 Parquet 文件页脚中的列索引(Column Index)页面格式。这些页面包含数据页(DataPages)的统计信息,并可用于在扫描有序或无序列数据时跳过不相关的页面,从而提高查询效率。
Parquet 逻辑类型(Logical Types)
逻辑类型(Logical Types)用于扩展 Parquet 可以存储的数据类型,通过指定如何解释基本数据类型来实现。
Parquet 数据类型
Parquet 文件格式支持的数据类型及最佳实践
Apache Parquet 文件格式(File Format)
本文介绍 Apache Parquet 文件格式的基本结构和设计原则,以及最佳实践建议。