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 zich richten 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 schemaontwikkeling. 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 met de naam my_json_datageladen. Deze tabel moet worden gemaakt voordat COPY INTO 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 onder abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1 in een Delta-tabel 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'

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

De volgende FORMAT_OPTIONS zijn beschikbaar om het invoerschema automatisch af te leiden met COPY INTO:

  • inferSchema: of de gegevenstypen van de geparseerde records moeten worden afgeleid of dat moet worden uitgegaan van het feit dat alle kolommen van StringTypezijn.

  • mergeSchema: hiermee wordt aangegeven of het schema moet worden afgeleid van 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, kunnen mergeSchema in COPY_OPTIONSworden false.

CSV-schema afleiden en ontwikkelen

In het volgende voorbeeld wordt een schemaloze Delta-tabel gemaakt met de naam my_pipe_data en wordt door pijpen gescheiden CSV 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 ignoreCorruptFilesstellen trueFORMAT_OPTIONS.

Het resultaat van de opdracht COPY INTO retourneert hoeveel bestanden zijn overgeslagen vanwege beschadiging in de kolom num_skipped_corrupt_files. Deze metrische waarde wordt ook weergegeven in de kolom operationMetrics onder numSkippedCorruptFiles na het uitvoeren van 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 COPY INTO de modus uit te voerenVALIDATE.

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.