Excel-Import
DuckDB unterstützt das Lesen von Excel-.xlsx-Dateien. .xls-Dateien werden jedoch nicht unterstützt.
Excel-Tabellenblätter importieren
Verwenden Sie die Funktion read_xlsx in der FROM-Klausel einer Abfrage:
SELECT * FROM read_xlsx('test_excel.xlsx');Alternativ können Sie die Funktion read_xlsx weglassen und DuckDB sie anhand der Dateiendung ableiten lassen:
SELECT * FROM 'test_excel.xlsx';Wenn Sie jedoch Optionen übergeben möchten, um das Importverhalten zu steuern, sollten Sie die Funktion read_xlsx verwenden.
Eine solche Option ist der Parameter sheet, mit dem Sie den Namen des Excel-Arbeitsblatts angeben können:
SELECT * FROM read_xlsx('test_excel.xlsx', sheet = 'Sheet1');Standardmäßig wird das erste Blatt geladen, wenn kein Blatt angegeben ist.
Einen bestimmten Bereich importieren
Um einen bestimmten Zellbereich auszuwählen, verwenden Sie den Parameter range mit einer Zeichenkette im Format A1:B2, wobei A1 die Zelle oben links und B2 die Zelle unten rechts ist:
SELECT * FROM read_xlsx('test_excel.xlsx', range = 'A1:B2');Um beispielsweise die ersten 5 Zeilen zu überspringen:
SELECT * FROM read_xlsx('test_excel.xlsx', range = 'A5:Z');Um die ersten 5 Spalten zu überspringen:
SELECT * FROM read_xlsx('test_excel.xlsx', range = 'E:Z');Wenn kein range-Parameter angegeben ist, ermittelt DuckDB den Bereich automatisch als rechteckige Region von Zellen zwischen der ersten Zeile aufeinanderfolgender nicht-leerer Zellen und der ersten leeren Zeile über dieselben Spalten.
Standardmäßig beendet DuckDB das Lesen der Excel-Datei beim Auftreten einer leeren Zeile, wenn kein Bereich angegeben ist. Ist ein Bereich angegeben, wird standardmäßig bis zum Ende des Bereichs gelesen. Dieses Verhalten lässt sich mit dem Parameter stop_at_empty steuern:
-- Read the first 100 rows, or until the first empty row, whichever comes firstSELECT * FROM read_xlsx('test_excel.xlsx', range = '1:100', stop_at_empty = true);
-- Always read the whole sheet, even if it contains empty rowsSELECT * FROM read_xlsx('test_excel.xlsx', stop_at_empty = false);Eine neue Tabelle anlegen
Um aus dem Ergebnis einer Abfrage eine neue Tabelle anzulegen, verwenden Sie CREATE TABLE ... AS mit einer SELECT-Anweisung:
CREATE TABLE new_tbl AS SELECT * FROM read_xlsx('test_excel.xlsx', sheet = 'Sheet1');In eine vorhandene Tabelle laden
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_xlsx('test_excel.xlsx', sheet = 'Sheet1');Alternativ können Sie die Anweisung COPY mit der Formatoption XLSX verwenden, um eine Excel-Datei in eine vorhandene Tabelle zu importieren:
COPY tbl FROM 'test_excel.xlsx' (FORMAT xlsx, SHEET 'Sheet1');Wenn Sie die Anweisung COPY verwenden, um eine Excel-Datei in eine vorhandene Tabelle zu laden, werden die Typen der Spalten in der Zieltabelle verwendet, um die Typen der Zellen im Excel-Blatt umzuwandeln.
Ein Blatt mit/ohne Kopfzeile importieren
Um die erste Zeile als Namen der resultierenden Spalten zu behandeln, verwenden Sie den Parameter header:
SELECT * FROM read_xlsx('test_excel.xlsx', header = true);Standardmäßig wird die erste Zeile als Kopfzeile behandelt, wenn alle Zellen in der ersten Zeile (innerhalb des ermittelten oder angegebenen Bereichs) nicht-leere Zeichenketten sind. Um dieses Verhalten zu deaktivieren, setzen Sie header auf false.
Typen erkennen
Wenn nicht in eine vorhandene Tabelle importiert wird, versucht DuckDB, die Typen der Spalten im Excel-Blatt anhand ihres Inhalts und/oder des „Zahlenformats“ zu erschließen.
- Die Typen
TIMESTAMP,TIME,DATEundBOOLEANwerden nach Möglichkeit anhand des auf die Zelle angewendeten „Zahlenformats“ erschlossen. - Textzellen mit
TRUEundFALSEwerden alsBOOLEANerkannt. - Leere Zellen gelten standardmäßig als Typ
DOUBLE. - Andernfalls werden Zellen anhand ihres Inhalts als
VARCHARoderDOUBLEerkannt.
Sie können dieses Verhalten auf mehrere Arten anpassen.
Um alle leeren Zellen als VARCHAR statt als DOUBLE zu behandeln, setzen Sie empty_as_varchar auf true:
SELECT * FROM read_xlsx('test_excel.xlsx', empty_as_varchar = true);Um die Typinferenz vollständig zu deaktivieren und alle Zellen als VARCHAR zu behandeln, setzen Sie all_varchar auf true:
SELECT * FROM read_xlsx('test_excel.xlsx', all_varchar = true);Wenn der Parameter ignore_errors auf true gesetzt ist, ersetzt DuckDB Zellen, die nicht in den entsprechenden erschlossenen Spaltentyp umgewandelt werden können, stillschweigend durch NULL-Werte.
SELECT * FROM read_xlsx('test_excel.xlsx', ignore_errors = true);Siehe auch
DuckDB kann Excel-Dateien auch exportieren. Weitere Details zur Excel-Unterstützung finden Sie auf der Seite der excel-Erweiterung.