Parquet 实现状态

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

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

图例

每个单元格的值表示:

  • ✅:支持
  • ❌:不支持
  • (R/W):仅部分支持读取/写入
  • (空白):无数据

各种实现:


物理数据类型支持情况

数据类型C++JavaGoRustcuDF
BOOLEAN
INT32
INT64
INT96 (1)
FLOAT
DOUBLE
BYTE_ARRAY
FIXED_LEN_BYTE_ARRAY

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


逻辑数据类型支持情况

数据类型C++JavaGoRustcuDF
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++JavaGoRustcuDF
PLAIN
PLAIN_DICTIONARY
RLE_DICTIONARY
RLE
BIT_PACKED (已弃用)(R)
DELTA_BINARY_PACKED
DELTA_LENGTH_BYTE_ARRAY
DELTA_BYTE_ARRAY
BYTE_STREAM_SPLIT

压缩方式支持情况

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

其他格式级功能支持情况

功能C++JavaGoRustcuDF
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++JavaGoRustcuDF
外部列数据 (1)(W)
行组 “排序列” 元数据 (2)(W)
通过统计信息进行行组剪枝
通过布隆过滤器进行行组剪枝
仅读取特定列
通过统计信息进行页面剪枝

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

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