Padrões comuns de carregamento de dados usando COPY INTO
Conheça padrões comuns para usar o COPY INTO
para carregar dados de fontes de arquivo no Delta Lake.
Há muitas opções para usar COPY INTO
. Você também pode usar credenciais temporárias com COPY INTO em combinação com esses padrões.
Consulte COPY INTO para obter uma referência completa de todas as opções.
Criar tabelas de destino para COPY INTO
COPY INTO
deve ter como destino uma tabela 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>)];
No Databricks Runtime 11.3 LTS e superior, a definição do esquema para essas tabelas é opcional para formatos com suporte para evolução do esquema. Confira Inferência e evolução de esquema usando COPY INTO para obter mais detalhes.
Carregar dados JSON usando COPY INTO
O exemplo a seguir carrega dados JSON de cinco arquivos no Azure Data Lake Storage Gen2 (ADLS Gen2) na tabela Delta chamada my_json_data
. Esta tabela deve ser criada antes de COPY INTO
poder ser executada. Se algum dado já tiver sido carregado de um dos arquivos, os dados não serão recarregados para esse arquivo.
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')
Carregue dados do Avro usando COPY INTO
O exemplo a seguir carrega dados do Avro no ADLS Gen2 usando expressões SQL adicionais como parte da instrução 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
Carregue arquivos CSV usando COPY INTO
O exemplo a seguir carrega arquivos CSV do Azure Data Lake Storage Gen2 em abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1
uma tabela 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'
Inferência e evolução de esquemas usando COPY INTO
Esta seção fornece exemplos de configurações comuns de inferência e evolução de esquema usando COPY INTO
.
Sintaxe
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');
As seguintes FORMAT_OPTIONS
estão disponíveis para inferir o esquema de entrada automaticamente com COPY INTO
:
inferSchema
: Para inferir os tipos de dados dos registros analisados ou assumir que todas as colunas são deStringType
.mergeSchema
: Para inferir o esquema em vários arquivos e mesclar o esquema de cada arquivo de origem.Se os arquivos de origem tiverem o mesmo esquema, o Databricks recomenda usar a configuração padrão para
mergeSchema
emFORMAT_OPTIONS
(false
).
As COPY_OPTIONS
a seguir estão disponíveis para evoluir o esquema de destino com COPY INTO
:
mergeSchema
: Para evoluir o esquema da tabela Delta de destino com base no esquema de entrada.Se o esquema de entrada e o esquema de destino forem iguais,
mergeSchema
poderá serfalse
emCOPY_OPTIONS
.
Inferir e evoluir o esquema CSV
O exemplo a seguir cria uma tabela Delta sem esquema chamada my_pipe_data
e carrega um CSV delimitado por pipe com um cabeçalho:
mergeSchema
é true
em FORMAT_OPTIONS
porque os arquivos de entrada podem ter diferenças de cabeçalho ou 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');
Ignorar arquivos corrompidos ao carregar dados
Se os dados que você está carregando não puderem ser lidos devido a algum problema de corrupção, esses arquivos poderão ser ignorados definindo ignoreCorruptFiles
para true
no FORMAT_OPTIONS
.
O resultado do comando COPY INTO
retorna quantos arquivos foram ignorados devido à corrupção na coluna num_skipped_corrupt_files
. Essa métrica também aparece na coluna operationMetrics
abaixo numSkippedCorruptFiles
depois de ser executada na tabela Delta DESCRIBE HISTORY
.
Arquivos corrompidos não são rastreados COPY INTO
, portanto, eles podem ser recarregados em uma execução subsequente se a corrupção for corrigida. Você pode ver quais arquivos estão corrompidos executando COPY INTO
no modo VALIDATE
.
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')
Observação
ignoreCorruptFiles
está disponível no Databricks Runtime 11.3 LTS e superior.