Parquet 实现状态
本页面总结了不同 Parquet 实现所支持的功能。
注意:此页面仍在完善中,欢迎大家帮助扩展其内容。
图例
每个单元格的值表示: * ✅:支持 * ❌:不支持 * (R/W):仅部分支持读取/写入 * (空白):无数据
各种实现:
C++
:parquet-cppJava
:parquet-javaGo
:parquet-goRust
:parquet-rscuDF
:cudf
物理数据类型支持情况
数据类型 | 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
。