Partilhar via


Padrões comuns de carregamento de dados usando COPY INTO

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

Existem muitas opções para usar COPY INTOo . 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 alvo 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, definir o esquema para essas tabelas é opcional para formatos que suportam a evolução do esquema. Consulte Inferência e evolução do esquema usando COPY INTO para obter detalhes.

Carregue 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 COPY INTO de 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 Avro usando COPY INTO

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

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 de esquema e evolução usando COPY INTO

Esta seção fornece exemplos de inferência de esquema comum e configurações de evolução usando COPY INTOo .

Sintaxe

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

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

  • inferSchema: Se para inferir os tipos de dados dos registros analisados ou para assumir que todas as colunas são de StringType.

  • mergeSchema: Se deseja inferir o esquema em vários arquivos de origem 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 in FORMAT_OPTIONS (false).

Os seguintes COPY_OPTIONS itens estão disponíveis para evoluir o esquema de destino com COPY INTO:

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

    Se o esquema de entrada e o esquema de destino forem os mesmos, mergeSchema pode estar false em COPY_OPTIONS.

Inferir e evoluir 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 está 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 como true no FORMAT_OPTIONS.

O resultado do COPY INTO comando retorna quantos arquivos foram ignorados devido a corrupção na num_skipped_corrupt_files coluna. Essa métrica também aparece na operationMetrics coluna abaixo numSkippedCorruptFiles depois de ser executada DESCRIBE HISTORY na tabela Delta.

Os arquivos corrompidos não são rastreados pelo 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 VALIDATE modo.

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

Nota

ignoreCorruptFiles está disponível no Databricks Runtime 11.3 LTS e superior.