Zum Inhalt springen

Parquet-Import

Um Daten aus einer Parquet-Datei zu lesen, verwenden Sie die Funktion read_parquet in der FROM-Klausel einer Abfrage:

SELECT * FROM read_parquet('input.parquet');

Alternativ können Sie die Funktion read_parquet weglassen und DuckDB sie anhand der Dateiendung ableiten lassen:

SELECT * FROM 'input.parquet';

Um mit dem Ergebnis einer Abfrage eine neue Tabelle anzulegen, verwenden Sie die Anweisung CREATE TABLE ... AS SELECT:

CREATE TABLE new_tbl AS
SELECT * FROM read_parquet('input.parquet');

Um Daten aus einer Abfrage in eine vorhandene Tabelle zu laden, verwenden Sie INSERT INTO mit einer SELECT-Anweisung:

INSERT INTO tbl
SELECT * FROM read_parquet('input.parquet');

Alternativ verwenden Sie die Anweisung COPY, um Daten aus einer Parquet-Datei in eine vorhandene Tabelle zu laden:

COPY tbl FROM 'input.parquet' (FORMAT parquet);

Schema zur Laufzeit anpassen

Sie können eine Parquet-Datei mit folgendem Trick in ein leicht abweichendes Schema laden (z. B. andere Spaltenanzahl, lockerere Typen).

Angenommen, Sie haben eine Parquet-Datei mit zwei Spalten, c1 und c2:

COPY (FROM (VALUES (42, 43)) t(c1, c2))
TO 'f.parquet';

Um eine weitere Spalte c3 hinzuzufügen, die in der Datei nicht vorhanden ist, führen Sie aus:

FROM (VALUES (NULL::VARCHAR, NULL, NULL)) t(c1, c2, c3)
WHERE false
UNION ALL BY NAME
FROM 'f.parquet';

Die erste FROM-Klausel erzeugt eine leere Tabelle mit drei Spalten, wobei c1 ein VARCHAR ist. Anschließend vereinen Sie die Parquet-Datei mit UNION ALL BY NAME. Das Ergebnis ist:

┌─────────┬───────┬───────┐
│ c1 │ c2 │ c3 │
│ varchar │ int32 │ int32 │
├─────────┼───────┼───────┤
│ 42 │ 43 │ NULL │
└─────────┴───────┴───────┘

Weitere Optionen finden Sie in der Parquet-Lade-Referenz.