Modelli comuni di caricamento dei dati con COPY INTO
Impara i modelli comuni per usare COPY INTO
per caricare dati da origini file in Delta Lake.
Sono disponibili molte opzioni per l'uso di COPY INTO
. È anche possibile usare le credenziali temporanee con COPY INTO in combinazione con questi modelli.
Per informazioni di riferimento complete su tutte le opzioni, vedere COPY INTO
.
Crea tabelle di destinazione per COPY INTO
COPY INTO
deve avere come destinazione una tabella Delta esistente.
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 e versioni successive, l'impostazione dello schema per queste tabelle è facoltativa per i formati che supportano l'evoluzione dello schema . Per informazioni dettagliate, vedere inferenza ed evoluzione dello schema usando COPY INTO
.
Caricare dati JSON con COPY INTO
L'esempio seguente carica i dati JSON da cinque file in Azure Data Lake Storage (ADLS) nella tabella Delta denominata my_json_data
. Questa tabella deve essere creata prima di poter eseguire COPY INTO
. Se i dati sono già stati caricati da uno dei file, i dati non verranno ricaricati per tale file.
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')
Caricare i dati Avro con COPY INTO
L'esempio seguente carica i dati Avro in ADLS usando espressioni SQL aggiuntive come parte dell'istruzione SELECT
.
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
Carica file CSV con COPY INTO
L'esempio seguente carica i file CSV da Azure Data Lake Storage in abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1
in una tabella Delta.
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 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'
Inferenza ed evoluzione dello schema con COPY INTO
Questa sezione fornisce esempi per le configurazioni comuni di inferenza ed evoluzione dello schema usando COPY INTO
.
Sintassi
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');
I FORMAT_OPTIONS
seguenti sono disponibili per dedurre automaticamente lo schema di input con COPY INTO
:
inferSchema
: indica se dedurre i tipi di dati dei record analizzati o presupporre che tutte le colonne siano diStringType
.mergeSchema
: indica se dedurre lo schema tra più file di origine e unire lo schema di ogni file di origine.Se i file di origine hanno lo stesso schema, Databricks consiglia di usare l'impostazione predefinita per
mergeSchema
inFORMAT_OPTIONS
(false
).
I COPY_OPTIONS
seguenti sono disponibili per l'evoluzione dello schema di destinazione con COPY INTO
:
mergeSchema
: indica se evolvere lo schema della tabella Delta di destinazione in base allo schema di input.Se lo schema di input e lo schema di destinazione sono uguali,
mergeSchema
può esserefalse
inCOPY_OPTIONS
.
Dedurre ed evolvere lo schema di CSV
Nell'esempio seguente viene creata una tabella Delta senza schema denominata my_pipe_data
e viene caricato un file CSV delimitato da pipe con un'intestazione.
mergeSchema
è true
in FORMAT_OPTIONS
perché i file di input potrebbero avere differenze di intestazione o delimitatore.
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');
Ignorare i file danneggiati durante il caricamento dei dati
Se i dati che si stanno caricando non possono essere letti a causa di un problema di danneggiamento, questi file possono essere ignorati impostando ignoreCorruptFiles
su true
nel FORMAT_OPTIONS
.
Il risultato del comando COPY INTO
restituisce il numero di file ignorati a causa di danneggiamenti nella colonna num_skipped_corrupt_files
. Questa metrica viene visualizzata anche nella colonna operationMetrics
sotto numSkippedCorruptFiles
dopo l'esecuzione di DESCRIBE HISTORY
nella tabella Delta.
I file danneggiati non vengono rilevati da COPY INTO
, quindi possono essere ricaricati in un'esecuzione successiva se il danneggiamento è corretto. È possibile vedere quali file sono danneggiati eseguendo COPY INTO
in VALIDATE
modalità .
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')
Nota
ignoreCorruptFiles
è disponibile in Databricks Runtime 11.3 LTS e versioni successive.