Allgemeine Muster zum Laden von Daten mithilfe vonCOPY 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.
CREATE TABLE IF NOT EXISTS my_table
[(col_1 col_1_type, col_2 col_2_type, ...)]
[COMMENT <table-description>]
[TBLPROPERTIES (<table-properties>)];
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. Weitere Informationen finden Sie unter Schemarückschluss und -entwicklung mit KOPIEREN IN.
Laden von JSON-Daten mithilfe von 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 mithilfe von 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 mithilfe von 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'
Schemarückschluss und -entwicklung mithilfe von COPY INTO
Dieser Abschnitt enthält Beispiele für einen allgemeinen Schemarückschluss und Evolutionskonfigurationen mithilfe von COPY INTO
.
Syntax
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');
Folgendes FORMAT_OPTIONS
ist verfügbar, um das Eingabeschema automatisch mit COPY INTO
abzuleiten:
inferSchema
: Gibt an, ob die Datentypen der analysierten Datensätze abgeleitet werden sollen oder angenommen werden soll, dass alle Spalten den TypStringType
aufweisen.mergeSchema
: Gibt an, ob das Schema über mehrere Quelldateien hinweg abgeleitet und das Schema der einzelnen Quelldateien zusammengeführt werden soll.Wenn die Quelldateien dasselbe Schema aufweisen, empfiehlt Databricks die Verwendung der Standardeinstellung für
mergeSchema
inFORMAT_OPTIONS
(false
).
Die folgenden COPY_OPTIONS
-Optionen stehen zur Entwicklung des Zielschemas mit COPY INTO
zur Verfügung:
mergeSchema
: Gibt an, ob das Schema der Ziel-Delta-Tabelle basierend auf dem Eingabeschema weiterentwickelt werden soll.Wenn das Eingabeschema und das Zielschema identisch sind, kann
mergeSchema
false
inCOPY_OPTIONS
sein.
Ableiten und Entwickeln eines CSV-Schemas
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.
mergeSchema
ist true
in FORMAT_OPTIONS
, weil die Eingabedateien möglicherweise Header- oder Trennzeichenunterschiede aufweisen.
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');
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.