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 vanStringType
zijn.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
inFORMAT_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 inCOPY_OPTIONS
bevindenfalse
.
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_OPTIONS
stellen 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.