Renomear e remover colunas usando o mapeamento de colunas do Delta Lake

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

Importante

As tabelas com mapeamento de colunas ativado só podem ser lidas no Databricks Runtime 10.4 LTS e superior.

Habilitar o mapeamento de coluna em tabelas pode interromper operações downstream que dependem do feed de dados de alterações do Delta. Confira Limitações do feed de dados de alterações para tabelas com mapeamento de coluna habilitado.

Habilitar o mapeamento de coluna em tabelas pode interromper as leituras de streaming da tabela Delta como origem, inclusive em Delta Live Tables. Confira Streaming com mapeamento de coluna e alterações de esquema.

Habilitar o mapeamento de coluna

O mapeamento de coluna requer os seguintes protocolos Delta:

  • Leitor versão 2 ou superior.
  • Gravador versão 5 ou superior.

Em uma tabela do Delta com as versões de protocolo necessárias, você pode habilitar o mapeamento de coluna ao definir delta.columnMapping.mode como name.

É possível usar o seguinte comando para habilitar o mapeamento de coluna:

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.columnMapping.mode' = 'name'
  )

Confira Desabilitar o mapeamento de coluna.

Renomear uma coluna

Observação

Disponível no Databricks Runtime 10.4 LTS e superior.

Quando o mapeamento de coluna estiver habilitado para uma tabela do Delta, você poderá renomear uma coluna:

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

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

Remover colunas

Observação

Disponível no Databricks Runtime 11.3 LTS e superior.

Quando o mapeamento de coluna estiver habilitado para uma tabela do Delta, você poderá remover 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, confira Atualizar esquema de tabela do Delta Lake.

Caracteres com suporte em nomes de coluna

Quando o mapeamento de coluna estiver habilitado para uma tabela do Delta, você poderá incluir espaços e qualquer um destes caracteres nos nomes de coluna da tabela: ,;{}()\n\t=.

Streaming com mapeamento de colunas e alterações de esquema

Importante

Esse recurso está em versão prévia pública no Databricks Runtime 13.3 LTS e superior.

Você pode fornecer um local de rastreamento de esquema para habilitar o streaming de tabelas Delta com o mapeamento de coluna habilitado. Isso supera um problema no qual as alterações de esquema não aditivas podem resultar em fluxos interrompidos.

Cada leitura de streaming 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 em fluxo contínuo.

Observação

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

A opção schemaTrackingLocation é usada para especificar o caminho para o rastreamento do esquema, conforme mostrado no 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")
)

Desabilitar o mapeamento de coluna

No Databricks Runtime 15.3 e em versões posteriores, é possível usar o comando DROP FEATURE para remover o mapeamento de coluna de uma tabela e fazer downgrade do protocolo da tabela.

Consulte Remover os recursos da tabela Delta.