Renomeie e solte colunas com mapeamento de coluna Delta Lake

Visualização

Este recurso está em visualização pública.

Databricks dá suporte ao mapeamento de coluna para tabelas Delta Lake, que permite alterações somente de metadados para marcar colunas como excluídas ou renomeadas sem reescrever arquivos de dados. Ele também permite que os usuários nomeiem as colunas da tabela Delta usando caracteres que não são permitidos pelo Parquet, como espaços, para que os usuários possam inserir dados CSV ou JSON diretamente no Delta sem a necessidade de renomear colunas devido a restrições de caracteres anteriores.

Importante

Habilitar o mapeamento de colunas também habilita prefixos de arquivos aleatórios, o que remove a capacidade de explorar o particionamento no estilo Hive do uso de dados. Consulte Delta Lake e Parquet compartilham estratégias de particionamento?.

A ativação do mapeamento de coluna em tabelas pode interromper as operações downstream que dependem do feed de dados de alteração Delta. Consulte Alterar limitações de alimentação de dados para tabelas com mapeamento de coluna ativado.

A ativação do mapeamento de coluna em tabelas pode interromper a leitura da transmissão da tabela Delta como uma origem, inclusive em Delta Live Tables. Consulte a transmissão com mapeamento de colunas e alterações de esquema.

Como habilitar o mapeamento da coluna Delta Lake

Importante

A ativação do mapeamento de colunas para uma tabela atualiza a versão da tabela Delta. Essa atualização de protocolo é irreversível. As tabelas com mapeamento de coluna ativado só podem ser lidas em Databricks Runtime 10.4 LTS e acima.

O mapeamento de coluna requer os seguintes protocolos Delta:

  • Leitor versão 2 ouacima.

  • Writer versão 5 ouacima.

Para uma tabela Delta com as versões de protocolo necessárias, você pode ativar o mapeamento de coluna definindo delta.columnMapping.mode como name.

Você pode usar o seguinte comando para atualizar a versão da tabela e habilitar o mapeamento de colunas:

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.minReaderVersion' = '2',
    'delta.minWriterVersion' = '5',
    'delta.columnMapping.mode' = 'name'
  )

Observação

Você não pode desativar o mapeamento de coluna depois de ativá-lo. Se você tentar definir 'delta.columnMapping.mode' = 'none', receberá um erro.

Renomear uma coluna

Observação

Disponível em Databricks Runtime 10.4 LTS e acima.

Quando o mapeamento de colunas está habilitado para uma tabela Delta, você pode renomear uma coluna:

ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name

Para obter mais exemplos, consulte Atualizar esquema de tabela do Delta Lake.

Soltar colunas

Observação

Disponível em Databricks Runtime 11.3 LTS e acima.

Quando o mapeamento de colunas está habilitado para uma tabela Delta, você pode descartar uma ou mais colunas:

ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)

Para obter mais detalhes, consulte Atualizar o esquema da tabela Delta Lake.

Caracteres suportados em nomes de coluna

Quando o mapeamento de colunas está ativado para uma tabela Delta, você pode incluir espaços e qualquer um destes caracteres nos nomes das colunas da tabela: ,;{}()\n\t=.

transmissão com mapeamento de coluna e alterações de esquema

Importante

Esse recurso está em Public Preview em Databricks Runtime 13.3 LTS e acima.

Você pode fornecer um local de acompanhamento de esquema para permitir a transmissão de tabelas Delta com mapeamento de coluna ativado. Isso supera um problema no qual alterações de esquema não aditivas podem resultar em transmissão interrompida.

Cada transmissão lida em uma fonte de dados deve ter seu próprio schemaTrackingLocation especificado. O schemaTrackingLocation especificado deve estar contido no diretório especificado para o checkpointLocation da tabela de destino para gravação de transmissão.

Observação

Para cargas de trabalho de transmissão que combinam dados de várias tabelas Delta de origem, você precisa especificar diretórios exclusivos dentro do checkpointLocation para cada tabela de origem.

A opção schemaTrackingLocation é utilizada para especificar o caminho para acompanhamento do esquema, conforme exemplo de código a seguir:

checkpoint_path = "/path/to/checkpointLocation"

(spark.readStream
  .option("schemaTrackingLocation", checkpoint_path)
  .table("delta_source_table")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .toTable("output_table")
)