Modelli comuni di caricamento dei dati con COPY INTO
Informazioni sui modelli comuni da 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 Gen2 (ADLS Gen2) 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 Gen2 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
Caricare file CSV con COPY INTO
L'esempio seguente carica i file CSV da Azure Data Lake Storage Gen2 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 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'
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 su ignoreCorruptFiles
true
in 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.