Modelli di caricamento dei dati comuni 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 .

Creare tabelle di destinazione per COPY INTO

COPY INTO deve avere come destinazione una tabella Delta esistente. 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:

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

Si noti che per dedurre lo schema con COPY INTO, è necessario passare opzioni aggiuntive:

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

L'esempio seguente crea una tabella Delta senza schema denominata my_pipe_data e carica un csv delimitato da pipe con un'intestazione:

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

Caricare dati JSON con COPY INTO

L'esempio seguente carica i dati JSON da cinque file in Azure Data Lake Archiviazione Gen2 (ADLS Gen2) nella tabella Delta denominata my_json_data. Questa tabella deve essere creata prima di COPY INTO poter essere eseguita. 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 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 Archiviazione Gen2 abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1 in una tabella Delta in 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'

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

Il risultato del comando restituisce il numero di COPY INTO file ignorati a causa del danneggiamento nella num_skipped_corrupt_files colonna. Questa metrica viene visualizzata anche nella colonna sotto numSkippedCorruptFiles dopo l'esecuzione operationMetricsDESCRIBE 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.