Zum Inhalt springen

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
  • VARCHAR
  • BLOB

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