Parquet-Metadaten abfragen
Parquet-Metadaten
Die Funktion parquet_metadata fragt die in einer Parquet-Datei enthaltenen Metadaten ab. Sie zeigt interne Details der Datei, etwa die Statistiken der einzelnen Spalten. Das hilft herauszufinden, welche Art von Überspringen in Parquet-Dateien möglich ist, oder schnell zu überblicken, was die verschiedenen Spalten enthalten. Die Funktion unterstützt Glob-Muster, um Metadaten mehrerer Dateien parallel abzufragen:
SELECT *FROM parquet_metadata('test.parquet');SELECT *FROM parquet_metadata('data/*.parquet');Die folgende Tabelle listet die von parquet_metadata zurückgegebenen Spalten auf.
| Feld | Typ |
|---|---|
| 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
Die Funktion parquet_schema fragt das interne Schema einer Parquet-Datei ab. Das ist das Schema, wie es in den Metadaten der Parquet-Datei steht. Um Spaltennamen und -typen einer Parquet-Datei zu ermitteln, ist DESCRIBE einfacher.
Spaltennamen und Spaltentypen holen:
DESCRIBE SELECT * FROM 'test.parquet';Internes Schema einer Parquet-Datei holen:
SELECT *FROM parquet_schema('test.parquet');Die folgende Tabelle listet die von parquet_schema zurückgegebenen Spalten auf.
| Feld | Typ |
|---|---|
| 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-Datei-Metadaten
Die Funktion parquet_file_metadata fragt dateiweite Metadaten ab, etwa die Formatversion und den verwendeten Verschlüsselungsalgorithmus:
SELECT *FROM parquet_file_metadata('test.parquet');Die folgende Tabelle listet die von parquet_file_metadata zurückgegebenen Spalten auf.
| Feld | Typ |
|---|---|
| file_name | VARCHAR |
| created_by | VARCHAR |
| num_rows | BIGINT |
| num_row_groups | BIGINT |
| format_version | BIGINT |
| encryption_algorithm | VARCHAR |
| footer_signing_key_metadata | VARCHAR |
| file_size_bytes | UBIGINT |
| footer_size | UBIGINT |
| column_orders | VARCHAR[] |
Parquet-Key-Value-Metadaten
Die Funktion parquet_kv_metadata fragt benutzerdefinierte Metadaten ab, die als Schlüssel-Wert-Paare hinterlegt sind:
SELECT *FROM parquet_kv_metadata('test.parquet');Die folgende Tabelle listet die von parquet_kv_metadata zurückgegebenen Spalten auf.
| Feld | Typ |
|---|---|
| file_name | VARCHAR |
| key | BLOB |
| value | BLOB |
Vollständige Metadaten
Die Funktion parquet_full_metadata gibt alle Metadaten einer Parquet-Datei in einer Zeile zurück. Sie kombiniert die Ergebnisse von parquet_file_metadata, parquet_metadata, parquet_schema und parquet_kv_metadata als verschachtelte Struct-Arrays:
SELECT *FROM parquet_full_metadata('test.parquet');| Feld | Typ |
|---|---|
| parquet_file_metadata | STRUCT(…)[] |
| parquet_metadata | STRUCT(…)[] |
| parquet_schema | STRUCT(…)[] |
| parquet_kv_metadata | STRUCT(…)[] |
Jedes Struct-Array enthält dieselben Spalten wie die entsprechende eigenständige Funktion.
Bloom-Filter
DuckDB unterstützt Bloom-Filter, um Row Groups auszuschließen, die für hochselektive Abfragen nicht gelesen werden müssen. Derzeit werden Bloom-Filter für die folgenden Typen unterstützt:
- Ganzzahltypen:
TINYINT,UTINYINT,SMALLINT,USMALLINT,INTEGER,UINTEGER,BIGINT,UBIGINT - Gleitkommatypen:
FLOAT,DOUBLE VARCHARBLOB
Die Funktion parquet_bloom_probe(filename, column_name, value) zeigt, welche Row Groups beim Filtern nach einem bestimmten Wert einer bestimmten Spalte anhand des Bloom-Filters ausgeschlossen werden können.
Zum Beispiel:
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 |