Häufig verwendete Muster zum Laden von Daten mit COPY INTO
Lernen Sie gängige Muster für die Verwendung von COPY INTO
zum Laden von Daten aus Dateiquellen in Delta Lake kennen.
Es gibt viele Optionen für die Verwendung von COPY INTO
. Sie können auch temporäre Anmeldeinformationen mit COPY INTO in Kombination mit diesen Mustern verwenden.
Eine vollständige Referenz für alle Optionen finden Sie unter COPY INTO.
Erstellen von Zieltabellen für COPY INTO
COPY INTO
muss auf eine vorhandene Delta-Tabelle abzielen. In Databricks Runtime 11.3 LTS und höher ist das Festlegen des Schemas für diese Tabellen optional für Formate, die die Schemaentwicklung unterstützen:
CREATE TABLE IF NOT EXISTS my_table
[(col_1 col_1_type, col_2 col_2_type, ...)]
[COMMENT <table-description>]
[TBLPROPERTIES (<table-properties>)];
Beachten Sie, dass Sie zusätzliche Optionen übergeben müssen, um das Schema mit COPY INTO
abzuleiten:
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');
Im folgenden Beispiel wird eine schemalose Delta-Tabelle mit dem Namen my_pipe_data
erstellt und eine durch senkrechte Striche getrennte CSV-Datei mit einem Header geladen:
CREATE TABLE IF NOT EXISTS my_pipe_data;
COPY INTO my_pipe_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
FILEFORMAT = CSV
FORMAT_OPTIONS ('mergeSchema' = 'true',
'delimiter' = '|',
'header' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');
Laden von JSON-Daten mit COPY INTO
Im folgenden Beispiel werden JSON-Daten aus fünf Dateien in Azure Data Lake Storage Gen2 (ADLS Gen2) in die Delta-Tabelle mit dem Namen my_json_data
geladen. Diese Tabelle muss erstellt werden, damit COPY INTO
ausgeführt werden kann. Wenn bereits Daten aus einer der Dateien geladen wurden, werden die Daten für diese Datei nicht erneut geladen.
COPY INTO my_json_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
FILEFORMAT = JSON
FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')
-- The second execution will not copy any data since the first command already loaded the data
COPY INTO my_json_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
FILEFORMAT = JSON
FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')
Laden von Avro-Daten mit COPY INTO
Im folgenden Beispiel werden Avro-Daten in ADLS Gen2 mithilfe zusätzlicher SQL-Ausdrücke als Teil der SELECT
-Anweisung geladen.
COPY INTO my_delta_table
FROM (SELECT to_date(dt) dt, event as measurement, quantity::double
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
FILEFORMAT = AVRO
Laden von CSV-Dateien mit COPY INTO
Im folgenden Beispiel werden CSV-Dateien aus Azure Data Lake Storage Gen2 unter abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1
in eine Delta-Tabelle geladen.
COPY INTO target_table
FROM (SELECT key, index, textData, 'constant_value'
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
FORMAT_OPTIONS('header' = 'true')
-- The example below loads CSV files without headers in ADLS Gen2 using COPY INTO.
-- By casting the data and renaming the columns, you can put the data in the schema you want
COPY INTO target_table
FROM (SELECT _c0::bigint key, _c1::int index, _c2 textData
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
Ignorieren beschädigter Dateien beim Laden von Daten
Wenn die von Ihnen geladenen Daten aufgrund eines Beschädigungsproblems nicht gelesen werden können, können diese Dateien übersprungen werden, indem Sie ignoreCorruptFiles
auf true
in die FORMAT_OPTIONS
festlegen.
Das Ergebnis des COPY INTO
-Befehls gibt an, wie viele Dateien aufgrund einer Beschädigung in der num_skipped_corrupt_files
-Spalte übersprungen wurden. Diese Metrik wird auch in der Spalte operationMetrics
unter numSkippedCorruptFiles
nach Ausführung von DESCRIBE HISTORY
in der Delta-Tabelle angezeigt.
Beschädigte Dateien werden von COPY INTO
nicht nachverfolgt, sie können also in einer nachfolgenden Ausführung erneut geladen werden, wenn die Beschädigung behoben wurde. Sie können sehen, welche Dateien beschädigt sind, indem Sie COPY INTO
im VALIDATE
-Modus ausführen.
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')
Hinweis
ignoreCorruptFiles
ist in Databricks Runtime 11.3 LTS und höher verfügbar.