Patrones comunes de carga de datos mediante COPY INTO

Obtenga información sobre patrones comunes para usar COPY INTO con el fin de cargar datos de orígenes de archivos en Delta Lake.

Hay muchas opciones para usar COPY INTO. También puede usar credenciales temporales con COPY INTO en combinación con estos patrones.

Consulte COPY INTO para obtener una referencia completa de todas las opciones.

Creación de tablas de destino para COPY INTO

COPY INTO debe tener como destino una tabla Delta existente. En Databricks Runtime 11.3 LTS y versiones posteriores, establecer el esquema para estas tablas es opcional para los formatos que admiten la evolución del esquema:

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

Tenga en cuenta que para deducir el esquema con COPY INTO, debe pasar opciones adicionales:

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

En el ejemplo siguiente se crea una tabla Delta sin esquema denominada my_pipe_data y se carga un CSV delimitado por canalización con un encabezado:

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

Carga de datos JSON con COPY INTO

En el ejemplo siguiente se cargan datos JSON de cinco archivos de Azure Data Lake Storage Gen2 (ADLS Gen2) en la tabla Delta denominada my_json_data. Esta tabla debe crearse para que COPY INTO pueda ejecutarse. Si ya se habían cargado datos desde uno de los archivos, estos no se volverán a cargar para ese archivo.

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

Carga de datos Avro con COPY INTO

En el ejemplo siguiente se cargan datos Avro en ADLS Gen2 mediante expresiones SQL adicionales como parte de la instrucción 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

Carga de archivos CSV con COPY INTO

En el ejemplo siguiente se cargan archivos CSV de Azure Data Lake Storage Gen2 en abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1 en una tabla Delta de 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'

Omisión de archivos dañados durante la carga de datos

Si los datos que está cargando no se pueden leer debido a algún problema de daños, esos archivos se pueden omitir estableciendo ignoreCorruptFilestrue en FORMAT_OPTIONS.

El resultado del comando COPY INTO devuelve el número de archivos que se omitieron debido a daños en la columna num_skipped_corrupt_files. Esta métrica también se muestra en la columna operationMetrics, en numSkippedCorruptFiles, después de ejecutar DESCRIBE HISTORY en la tabla Delta.

No se realiza un seguimiento de los archivos dañados por COPY INTO, por lo que se pueden volver a cargar en una ejecución posterior si se corrigen los daños. Para ver qué archivos están dañados, ejecute COPY INTO en modo VALIDATE.

COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')

Nota:

ignoreCorruptFiles está disponible en Databricks Runtime 11.3 LTS y versiones posteriores.