Delen via


Algemene patronen voor het laden van gegevens met behulp van COPY INTO

Meer informatie over veelvoorkomende patronen voor het laden COPY INTO van gegevens uit bestandsbronnen in Delta Lake.

Er zijn veel opties voor het gebruik van COPY INTO. U kunt ook tijdelijke referenties gebruiken met COPY INTO in combinatie met deze patronen.

Zie COPY INTO voor een volledig overzicht van alle opties.

Doeltabellen maken voor COPY INTO

COPY INTO moet gericht zijn op een bestaande Delta-tabel.

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 en hoger is het instellen van het schema voor deze tabellen optioneel voor indelingen die ondersteuning bieden voor de ontwikkeling van schema's. Zie Schemadeductie en evolutie met BEHULP van COPY INTO voor meer informatie.

JSON-gegevens laden met COPY INTO

In het volgende voorbeeld worden JSON-gegevens uit vijf bestanden in Azure Data Lake Storage Gen2 (ADLS Gen2) in de Delta-tabel geladen met de naam my_json_data. Deze tabel moet worden gemaakt voordat COPY INTO deze kan worden uitgevoerd. Als er al gegevens uit een van de bestanden zijn geladen, worden de gegevens niet opnieuw geladen voor dat bestand.

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')

Avro-gegevens laden met COPY INTO

In het volgende voorbeeld worden Avro-gegevens in ADLS Gen2 geladen met behulp van extra SQL-expressies als onderdeel van de SELECT instructie.

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

CSV-bestanden laden met COPY INTO

In het volgende voorbeeld worden CSV-bestanden uit Azure Data Lake Storage Gen2 geladen abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1 in een Delta-tabel.

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'

Schemadeductie en evolutie met behulp van COPY INTO

Deze sectie bevat voorbeelden voor algemene schemadeductie- en evolutieconfiguraties met behulp van COPY INTO.

Syntaxis

COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');

Het volgende FORMAT_OPTIONS is beschikbaar om het invoerschema automatisch af te leiden met COPY INTO:

  • inferSchema: Of u de gegevenstypen van de geparseerde records wilt afleiden of wilt aannemen dat alle kolommen van StringTypezijn.

  • mergeSchema: Hiermee wordt aangegeven of het schema moet worden afgeleid over meerdere bronbestanden en het schema van elk bronbestand moet worden samengevoegd.

    Als de bronbestanden hetzelfde schema hebben, raadt Databricks aan om de standaardinstelling voor mergeSchema in FORMAT_OPTIONS (false) te gebruiken.

De volgende COPY_OPTIONS zijn beschikbaar om het doelschema te ontwikkelen met COPY INTO:

  • mergeSchema: Of het schema van de doel-Delta-tabel moet worden ontwikkeld op basis van het invoerschema.

    Als het invoerschema en het doelschema hetzelfde zijn, mergeSchema kunnen deze zich in COPY_OPTIONSbevindenfalse.

CSV-schema afleiden en ontwikkelen

In het volgende voorbeeld wordt een schemaloze Delta-tabel gemaakt die door pijpen gescheiden CSV wordt aangeroepen my_pipe_data en geladen met een header.

mergeSchema is true in FORMAT_OPTIONS omdat de invoerbestanden header- of scheidingstekens kunnen hebben.

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');

Beschadigde bestanden negeren tijdens het laden van gegevens

Als de gegevens die u laadt, niet kunnen worden gelezen vanwege een probleem met beschadiging, kunnen deze bestanden worden overgeslagen door in de instelling in te FORMAT_OPTIONSstellen ignoreCorruptFiles true.

Het resultaat van de COPY INTO opdracht retourneert hoeveel bestanden zijn overgeslagen vanwege beschadiging in de num_skipped_corrupt_files kolom. Deze metrische waarde wordt ook weergegeven in de operationMetrics kolom onder numSkippedCorruptFiles nadat deze is uitgevoerd DESCRIBE HISTORY in de Delta-tabel.

Beschadigde bestanden worden niet bijgehouden door COPY INTO, zodat ze in een volgende uitvoering opnieuw kunnen worden geladen als de beschadiging is opgelost. U kunt zien welke bestanden beschadigd zijn door in VALIDATE de modus uit te voerenCOPY INTO.

COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')

Notitie

ignoreCorruptFiles is beschikbaar in Databricks Runtime 11.3 LTS en hoger.