Zum Inhalt springen

Tipps zum CSV-Import

Im Folgenden finden Sie Tipps für den Import komplexer CSV-Dateien. In den Beispielen verwenden wir die Datei flights.csv.

Header-Flag überschreiben, wenn der Header nicht korrekt erkannt wird

Enthält eine Datei nur Zeichenketten-Spalten, kann die automatische header-Erkennung fehlschlagen. Geben Sie die Option header an, um dieses Verhalten zu überschreiben.

SELECT * FROM read_csv('flights.csv', header = true);

Namen angeben, wenn die Datei keinen Header enthält

Enthält die Datei keinen Header, werden standardmäßig automatisch Namen erzeugt. Mit der Option names können Sie eigene Namen vorgeben.

SELECT * FROM read_csv('flights.csv', names = ['DateOfFlight', 'CarrierName']);

Typen einzelner Spalten überschreiben

Mit dem Flag types überschreiben Sie die Typen nur bestimmter Spalten, indem Sie ein Struct mit Zuordnungen nametype übergeben.

SELECT * FROM read_csv('flights.csv', types = {'FlightDate': 'DATE'});

COPY verwenden, wenn Daten in eine Tabelle geladen werden

Die COPY-Anweisung kopiert Daten direkt in eine Tabelle. Der CSV-Reader verwendet das Schema der Tabelle statt die Typen aus der Datei automatisch zu erkennen. Das beschleunigt die Autoerkennung und verhindert Fehler bei der Autoerkennung.

COPY tbl FROM 'test.csv';

union_by_name verwenden, wenn Dateien unterschiedliche Schemas haben

Die Option union_by_name vereinheitlicht das Schema von Dateien mit unterschiedlichen oder fehlenden Spalten. Für Dateien, denen bestimmte Spalten fehlen, werden NULL-Werte eingesetzt.

SELECT * FROM read_csv('flights*.csv', union_by_name = true);

Um Daten in eine bestehende Tabelle zu laden, die mehr Spalten hat als die CSV-Datei, können Sie die Klausel INSERT INTO ... BY NAME verwenden:

INSERT INTO tbl BY NAME
SELECT * FROM read_csv('input.csv');

Stichprobengröße

Wenn der CSV-Sniffer den Typ nicht korrekt erkennt, erhöhen Sie die Stichprobengröße. Die Option sample_size = -1 zwingt den Sniffer, die gesamte Datei zu lesen:

SELECT * FROM read_csv('my_csv_file.csv', sample_size = -1);