Compartir a través de


Patrones comunes de carga de datos que usan 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.

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

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. Consulte Inferencia y evolución del esquema mediante COPY INTO para obtener más detalles.

Carga de datos JSON mediante 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 de Avro mediante 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 mediante 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.

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'

Inferencia y evolución de esquemas mediante COPY INTO

En esta sección se proporcionan ejemplos de configuraciones habituales de inferencia y evolución de esquemas mediante COPY INTO.

Sintaxis

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

Los siguientes FORMAT_OPTIONS están disponibles para inferir automáticamente el esquema de entrada con COPY INTO:

  • inferSchema: si se deben extrapolar los tipos de datos de los registros analizados o se supone que todas las columnas son de StringType.

  • mergeSchema: si se debe inferir el esquema en varios archivos de origen y combinar el esquema de cada archivo de origen.

    Si los archivos de origen tienen el mismo esquema, Databricks recomienda usar la configuración predeterminada para mergeSchema en FORMAT_OPTIONS (false).

Los siguientes COPY_OPTIONS están disponibles para evolucionar el esquema de destino con COPY INTO:

  • mergeSchema: si se va a evolucionar el esquema de la tabla Delta de destino en función del esquema de entrada.

    Si el esquema de entrada y el esquema de destino son los mismos, mergeSchema puede ser false en COPY_OPTIONS.

Inferencia y evolución del esquema CSV

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.

mergeSchema es true en FORMAT_OPTIONS porque los archivos de entrada pueden tener diferencias de encabezado o delimitador.

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

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.