跳到主要内容

查询 Parquet 元数据

Parquet 元数据

parquet_metadata 函数可查询 Parquet 文件中的元数据,揭示该文件的多种内部细节(例如各列统计信息)。这有助于判断 Parquet 文件可进行哪些“跳过读取”,也可快速了解各列大致内容:

SELECT *
FROM parquet_metadata('test.parquet');

下表为 parquet_metadata 返回的列:

字段类型
file_nameVARCHAR
row_group_idBIGINT
row_group_num_rowsBIGINT
row_group_num_columnsBIGINT
row_group_bytesBIGINT
column_idBIGINT
file_offsetBIGINT
num_valuesBIGINT
path_in_schemaVARCHAR
typeVARCHAR
stats_minVARCHAR
stats_maxVARCHAR
stats_null_countBIGINT
stats_distinct_countBIGINT
stats_min_valueVARCHAR
stats_max_valueVARCHAR
compressionVARCHAR
encodingsVARCHAR
index_page_offsetBIGINT
dictionary_page_offsetBIGINT
data_page_offsetBIGINT
total_compressed_sizeBIGINT
total_uncompressed_sizeBIGINT
key_value_metadataMAP(BLOB, BLOB)
bloom_filter_offsetBIGINT
bloom_filter_lengthBIGINT
min_is_exactBOOLEAN
max_is_exactBOOLEAN
row_group_compressed_bytesBIGINT

Parquet Schema

parquet_schema 函数可查询 Parquet 文件内部 schema。注意,这里返回的是 Parquet 元数据中记录的 schema。若你只想查看文件的列名与列类型,使用 DESCRIBE 通常更直接。

获取列名与列类型:

DESCRIBE SELECT * FROM 'test.parquet';

获取 Parquet 文件内部 schema:

SELECT *
FROM parquet_schema('test.parquet');

下表为 parquet_schema 返回的列:

字段类型
file_nameVARCHAR
nameVARCHAR
typeVARCHAR
type_lengthVARCHAR
repetition_typeVARCHAR
num_childrenBIGINT
converted_typeVARCHAR
scaleBIGINT
precisionBIGINT
field_idBIGINT
logical_typeVARCHAR

Parquet 文件级元数据

parquet_file_metadata 可用于查询文件级元数据,例如格式版本与所用加密算法:

SELECT *
FROM parquet_file_metadata('test.parquet');

下表为 parquet_file_metadata 返回的列:

字段类型
file_nameVARCHAR
created_byVARCHAR
num_rowsBIGINT
num_row_groupsBIGINT
format_versionBIGINT
encryption_algorithmVARCHAR
footer_signing_key_metadataVARCHAR

Parquet 键值元数据

parquet_kv_metadata 函数可用于查询以键值对形式定义的自定义元数据:

SELECT *
FROM parquet_kv_metadata('test.parquet');

下表为 parquet_kv_metadata 返回的列:

字段类型
file_nameVARCHAR
keyBLOB
valueBLOB

Bloom 过滤器

Goose 支持 Bloom 过滤器,可用于裁剪需要读取的 row group,以加速高选择性查询。 当前支持的类型包括:

  • Integer types: TINYINT, UTINYINT, SMALLINT, USMALLINT, INTEGER, UINTEGER, BIGINT, UBIGINT
  • Floating point types: FLOAT, DOUBLE
  • VARCHAR
  • BLOB

parquet_bloom_probe(filename, column_name, value) 可显示:对某列某值进行过滤时,哪些 row group 可通过 Bloom 过滤器被排除。 例如:

FROM parquet_bloom_probe('my_file.parquet', 'my_col', 500);
file_namerow_group_idbloom_filter_excludes
my_file.parquet0true
.........
my_file.parquet9false