Share via


Algemene patronen voor het laden van gegevens met 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. 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:

CREATE TABLE IF NOT EXISTS my_table
[(col_1 col_1_type, col_2 col_2_type, ...)]
[COMMENT <table-description>]
[TBLPROPERTIES (<table-properties>)];

Houd er rekening mee dat als u het schema wilt COPY INTOafleiden, u extra opties moet doorgeven:

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

In het volgende voorbeeld wordt een schemaloze Delta-tabel gemaakt my_pipe_data die een door pijp gescheiden CSV met een koptekst laadt en laadt:

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

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 op abfss://container@storageAccount.dfs.core.windows.net/deltaTables/target.

COPY INTO delta.`abfss://container@storageAccount.dfs.core.windows.net/deltaTables/target`
  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 delta.`abfss://container@storageAccount.dfs.core.windows.net/deltaTables/target`
  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'

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 ignoreCorruptFilestrue.

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.