Pular para o conteúdo principal

Padrões comuns de carregamento de dados usando COPY INTO

Aprenda padrões comuns para usar o site COPY INTO para carregar dados de fontes de arquivos no Delta Lake.

Há muitas opções para usar COPY INTO.

Consulte COPY INTO para obter uma referência completa de todas as opções.

Crie tabelas de destino para COPY INTO

COPY INTO deve ter como alvo uma tabela Delta existente.

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

Em Databricks Runtime 11.3 LTS e acima, a configuração do esquema para essas tabelas é opcional para formatos que suportam a evolução do esquema. Consulte Inferência e evolução do esquema usando COPY INTOpara obter detalhes.

Load JSON uso de dados COPY INTO

O exemplo a seguir carrega dados JSON de cinco arquivos no Google Cloud Storage (GCS) na tabela Delta chamada my_json_data. Essa tabela deve ser criada antes que COPY INTO possa ser executado. Se algum dado já tiver sido carregado de um dos arquivos, os dados não serão recarregados para esse arquivo.

SQL
COPY INTO my_json_data
FROM 'gs://my-bucket/jsonData'
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 'gs://my-bucket/jsonData'
FILEFORMAT = JSON
FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')

Load Avro uso de dados COPY INTO

O exemplo a seguir carrega os dados do Avro no GCS usando expressões SQL adicionais como parte da instrução SELECT.

SQL
COPY INTO my_delta_table
FROM (SELECT to_date(dt) dt, event as measurement, quantity::double
FROM 'gs://my-bucket/avroData')
FILEFORMAT = AVRO

Carregar arquivos CSV usando COPY INTO

O exemplo a seguir carrega arquivos CSV do GCS em gs://bucket/base/path/folder1 em uma tabela Delta.

SQL
COPY INTO target_table
FROM (SELECT key, index, textData, 'constant_value'
FROM 'gs://bucket/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
FORMAT_OPTIONS('header' = 'true')

-- The example below loads CSV files without headers in GCS 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 'gs://bucket/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 esquemas usando COPY INTO.

Sintaxe

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

Os FORMAT_OPTIONS a seguir estão disponíveis para inferir o esquema de entrada automaticamente com COPY INTO:

  • inferSchema: se você deve inferir os tipos de dados dos registros analisados ou assumir que todas as colunas são de StringType.

  • mergeSchema: Se o senhor deve inferir o esquema em vários arquivos de origem e merge o esquema de cada arquivo de origem.

    Se os arquivos de origem tiverem o mesmo esquema, o site Databricks recomenda usar a configuração default para mergeSchema em FORMAT_OPTIONS (false).

Os COPY_OPTIONS a seguir estão disponíveis para desenvolver o esquema de destino com COPY INTO:

  • mergeSchema: Se o esquema da tabela Delta de destino deve evoluir com base no esquema de entrada.

    Se o esquema de entrada e o esquema de destino forem iguais, mergeSchema pode ser false em COPY_OPTIONS.

Inferir e desenvolver o esquema CSV

O exemplo a seguir cria uma tabela Delta sem esquema chamada my_pipe_data e carrega 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.

SQL
CREATE TABLE IF NOT EXISTS my_pipe_data;

COPY INTO my_pipe_data
FROM 'gs://my-bucket/pipeData'
FILEFORMAT = CSV
FORMAT_OPTIONS ('mergeSchema' = 'true',
'delimiter' = '|',
'header' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');

Ignore 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 podem 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 sob numSkippedCorruptFiles depois de executar DESCRIBE HISTORY na tabela Delta.

Os arquivos corrompidos não são rastreados pelo site COPY INTO, portanto, 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.

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

ignoreCorruptFiles está disponível em Databricks Runtime 11.3 LTS e acima.