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 deStringType
.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
enFORMAT_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 serfalse
enCOPY_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 ignoreCorruptFiles
true
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.