Freigeben über


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 Typ StringType 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 in FORMAT_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 in COPY_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.