Freigeben über


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.