查询 Parquet 元数据
Parquet 元数据
parquet_metadata 函数可查询 Parquet 文件中的元数据,揭示该文件的多种内部细节(例如各列统计信息)。这有助于判断 Parquet 文件可进行哪些“跳过读取”,也可快速了解各列大致内容:
SELECT *
FROM parquet_metadata('test.parquet');
下表为 parquet_metadata 返回的列:
| 字段 | 类型 |
|---|---|
| file_name | VARCHAR |
| row_group_id | BIGINT |
| row_group_num_rows | BIGINT |
| row_group_num_columns | BIGINT |
| row_group_bytes | BIGINT |
| column_id | BIGINT |
| file_offset | BIGINT |
| num_values | BIGINT |
| path_in_schema | VARCHAR |
| type | VARCHAR |
| stats_min | VARCHAR |
| stats_max | VARCHAR |
| stats_null_count | BIGINT |
| stats_distinct_count | BIGINT |
| stats_min_value | VARCHAR |
| stats_max_value | VARCHAR |
| compression | VARCHAR |
| encodings | VARCHAR |
| index_page_offset | BIGINT |
| dictionary_page_offset | BIGINT |
| data_page_offset | BIGINT |
| total_compressed_size | BIGINT |
| total_uncompressed_size | BIGINT |
| key_value_metadata | MAP(BLOB, BLOB) |
| bloom_filter_offset | BIGINT |
| bloom_filter_length | BIGINT |
| min_is_exact | BOOLEAN |
| max_is_exact | BOOLEAN |
| row_group_compressed_bytes | BIGINT |
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_name | VARCHAR |
| name | VARCHAR |
| type | VARCHAR |
| type_length | VARCHAR |
| repetition_type | VARCHAR |
| num_children | BIGINT |
| converted_type | VARCHAR |
| scale | BIGINT |
| precision | BIGINT |
| field_id | BIGINT |
| logical_type | VARCHAR |
Parquet 文件级元数据
parquet_file_metadata 可用于查询文件级元数据,例如格式版本与所用加密算法:
SELECT *
FROM parquet_file_metadata('test.parquet');
下表为 parquet_file_metadata 返回的列:
| 字段 | 类型 |
|---|---|
| file_name | VARCHAR |
| created_by | VARCHAR |
| num_rows | BIGINT |
| num_row_groups | BIGINT |
| format_version | BIGINT |
| encryption_algorithm | VARCHAR |
| footer_signing_key_metadata | VARCHAR |
Parquet 键值元数据
parquet_kv_metadata 函数可用于查询以键值对形式定义的自定义元数据:
SELECT *
FROM parquet_kv_metadata('test.parquet');
下表为 parquet_kv_metadata 返回的列:
| 字段 | 类型 |
|---|---|
| file_name | VARCHAR |
| key | BLOB |
| value | BLOB |
Bloom 过滤器
Goose 支持 Bloom 过滤器,可用于裁剪需要读取的 row group,以加速高选择性查询。 当前支持的类型包括:
- Integer types:
TINYINT,UTINYINT,SMALLINT,USMALLINT,INTEGER,UINTEGER,BIGINT,UBIGINT - Floating point types:
FLOAT,DOUBLE VARCHARBLOB
parquet_bloom_probe(filename, column_name, value) 可显示:对某列某值进行过滤时,哪些 row group 可通过 Bloom 过滤器被排除。
例如:
FROM parquet_bloom_probe('my_file.parquet', 'my_col', 500);
| file_name | row_group_id | bloom_filter_excludes |
|---|---|---|
| my_file.parquet | 0 | true |
| ... | ... | ... |
| my_file.parquet | 9 | false |