Mehrere Dateien lesen
DuckDB kann mehrere Dateien verschiedener Typen (CSV, Parquet, JSON) gleichzeitig lesen, entweder mit Glob-Syntax oder durch Angabe einer Dateiliste. Tipps zum Lesen von Dateien mit unterschiedlichen Schemas finden Sie auf der Seite Schemas kombinieren.
CSV
Alle Dateien mit der Endung .csv im Ordner dir lesen:
SELECT *FROM 'dir/*.csv';Alle Dateien mit der Endung .csv zwei Verzeichnisebenen tief lesen:
SELECT *FROM '*/*/*.csv';Alle Dateien mit der Endung .csv in beliebiger Tiefe im Ordner dir lesen:
SELECT *FROM 'dir/**/*.csv';Die CSV-Dateien flights1.csv und flights2.csv lesen:
SELECT *FROM read_csv(['flights1.csv', 'flights2.csv']);Die CSV-Dateien flights1.csv und flights2.csv lesen, Schemas nach Name vereinheitlichen und eine Spalte filename ausgeben:
SELECT *FROM read_csv(['flights1.csv', 'flights2.csv'], union_by_name = true, filename = true);Parquet
Alle Dateien lesen, die dem Glob-Muster entsprechen:
SELECT *FROM 'test/*.parquet';Drei Parquet-Dateien lesen und als eine Tabelle behandeln:
SELECT *FROM read_parquet(['file1.parquet', 'file2.parquet', 'file3.parquet']);Alle Parquet-Dateien aus zwei bestimmten Ordnern lesen:
SELECT *FROM read_parquet(['folder1/*.parquet', 'folder2/*.parquet']);Alle Parquet-Dateien lesen, die dem Glob-Muster in beliebiger Tiefe entsprechen:
SELECT *FROM read_parquet('dir/**/*.parquet');Mehrere Dateien und Globs
DuckDB kann auch eine Reihe von Parquet-Dateien lesen und sie wie eine einzige Tabelle behandeln. Das funktioniert nur, wenn die Parquet-Dateien dasselbe Schema haben. Welche Parquet-Dateien gelesen werden, geben Sie über einen Listenparameter, Glob-Muster oder eine Kombination aus beidem an.
Listenparameter
Die Funktion read_parquet kann eine Liste von Dateinamen als Eingabeparameter entgegennehmen.
Drei Parquet-Dateien lesen und als eine Tabelle behandeln:
SELECT *FROM read_parquet(['file1.parquet', 'file2.parquet', 'file3.parquet']);Glob-Syntax
Jeder Dateiname, der an read_parquet übergeben wird, kann ein genauer Dateiname sein oder Glob-Syntax verwenden, um mehrere Dateien zu lesen, die einem Muster entsprechen.
| Platzhalter | Beschreibung |
|---|---|
* |
Entspricht beliebig vielen beliebigen Zeichen (einschließlich keinem) |
** |
Entspricht beliebig vielen Unterverzeichnissen (einschließlich keinem) |
? |
Entspricht einem einzelnen Zeichen |
[abc] |
Entspricht einem der Zeichen in den Klammern |
[a-z] |
Entspricht einem Zeichen aus dem Bereich in den Klammern |
Beachten Sie, dass der Platzhalter ? in Globs beim Lesen über S3 wegen HTTP-Kodierungsproblemen nicht unterstützt wird.
Hier ein Beispiel, das alle Dateien mit der Endung .parquet im Ordner test liest:
Alle Dateien lesen, die dem Glob-Muster entsprechen:
SELECT *FROM read_parquet('test/*.parquet');Liste von Globs
Glob-Syntax und Listenparameter können kombiniert werden, um Dateien zu scannen, die eines von mehreren Mustern erfüllen.
Alle Parquet-Dateien aus 2 bestimmten Ordnern lesen.
SELECT *FROM read_parquet(['folder1/*.parquet', 'folder2/*.parquet']);DuckDB kann mehrere CSV-Dateien gleichzeitig lesen, entweder mit Glob-Syntax oder durch Angabe einer Dateiliste.
Dateiname
Mit dem Argument filename kann eine zusätzliche Spalte filename ergänzt werden, die angibt, aus welcher Datei eine Zeile stammt. Zum Beispiel:
SELECT *FROM read_csv(['flights1.csv', 'flights2.csv'], union_by_name = true, filename = true);| FlightDate | OriginCityName | DestCityName | UniqueCarrier | filename |
|---|---|---|---|---|
| 1988-01-01 | New York, NY | Los Angeles, CA | NULL | flights1.csv |
| 1988-01-02 | New York, NY | Los Angeles, CA | NULL | flights1.csv |
| 1988-01-03 | New York, NY | Los Angeles, CA | AA | flights2.csv |
Das Argument
filenameakzeptiert auch eine Zeichenkette (z. B.filename = 'input_file'). Diese wird dann als Name der hinzugefügten Spalte verwendet. Das ist nützlich, wenn die Quelldaten bereits eine Spaltefilenameenthalten und Sie eine Namenskollision vermeiden möchten.
Glob-Funktion zum Finden von Dateinamen
Die Glob-Muster können auch mit der Tabellenfunktion glob zum Suchen von Dateinamen verwendet werden.
Sie nimmt einen Parameter entgegen: den Suchpfad (der Glob-Muster enthalten darf).
Das aktuelle Verzeichnis nach allen Dateien durchsuchen.
SELECT *FROM glob('*');| file |
|---|
| test.csv |
| test.json |
| test.parquet |
| test2.csv |
| test2.parquet |
| todos.json |