跳转至

Parquet 实现状态

本页面总结了不同 Parquet 实现所支持的功能。

注意:此页面仍在完善中,欢迎大家帮助扩展其内容。

图例

每个单元格的值表示: * ✅:支持 * ❌:不支持 * (R/W):仅部分支持读取/写入 * (空白):无数据

各种实现:


物理数据类型支持情况

数据类型 C++ Java Go Rust cuDF
BOOLEAN
INT32
INT64
INT96 (1)
FLOAT
DOUBLE
BYTE_ARRAY
FIXED_LEN_BYTE_ARRAY

(1) 该类型已被弃用,但截至 2024 年仍然常见于现有 Parquet 文件中。


逻辑数据类型支持情况

数据类型 C++ Java Go Rust cuDF
STRING
ENUM
UUID
8, 16, 32, 64 位有符号/无符号整数
DECIMAL (INT32)
DECIMAL (INT64)
DECIMAL (BYTE_ARRAY)
DECIMAL (FIXED_LEN_BYTE_ARRAY)
DATE
TIME (INT32)
TIME (INT64)
TIMESTAMP (INT64)
INTERVAL ✅(*)
JSON ✅(*)
BSON ✅(*)
LIST
MAP
UNKNOWN (始终为空)
FLOAT16 ✅(*)

(*) 仅支持其物理类型的注解。


编码方式支持情况

编码方式 C++ Java Go Rust cuDF
PLAIN
PLAIN_DICTIONARY
RLE_DICTIONARY
RLE
BIT_PACKED (已弃用) (R)
DELTA_BINARY_PACKED
DELTA_LENGTH_BYTE_ARRAY
DELTA_BYTE_ARRAY
BYTE_STREAM_SPLIT

压缩方式支持情况

压缩方式 C++ Java Go Rust cuDF
UNCOMPRESSED
BROTLI (R)
GZIP (R)
LZ4 (已弃用)
LZ4_RAW
LZO
SNAPPY
ZSTD

其他格式级功能支持情况

功能 C++ Java Go Rust cuDF
xxHash 布隆过滤器 (R) (R)
布隆过滤器长度 (1) (R) (R)
统计 min_value, max_value
页面索引
页面 CRC32 校验
模块化加密
大小统计 (2)

(1) 见 parquet.thrift: ColumnMetaData->bloom_filter_length

(2) 见 parquet.thrift: ColumnMetaData->size_statistics


高级数据 API 对 Parquet 特性的支持

功能 C++ Java Go Rust cuDF
外部列数据 (1) (W)
行组 "排序列" 元数据 (2) (W)
通过统计信息进行行组剪枝
通过布隆过滤器进行行组剪枝
仅读取特定列
通过统计信息进行页面剪枝

(1) 见 parquet.thrift: ColumnChunk->file_path

(2) 见 parquet.thrift: RowGroup->sorting_columns