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

Importante

Esse recurso está em uma versão prévia.

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

Habilitar o mapeamento de coluna também permite prefixos de arquivo aleatórios, o que remove a capacidade de explorar dados usando o particionamento no estilo Hive. Confira O Delta Lake e o Parquet compartilham estratégias de particionamento?

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 a leitura de streaming da tabela Delta como uma origem, incluindo Delta Live Tables. Confira Streaming com mapeamento de coluna e alterações de esquema.

Como habilitar o mapeamento de colunas do Delta Lake

Importante

Ao habilitar o mapeamento de coluna de uma tabela, a versão da tabela Delta é atualizada. Essa atualização de protocolo é irreversível. As tabelas com mapeamento de colunas ativado só podem ser lidas no Databricks Runtime 10.4 LTS e superior.

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.

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

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

Observação

Não é possível desativar o mapeamento de coluna depois de habilitá-lo. Se você tentar definir 'delta.columnMapping.mode' = 'none', ocorrerá um erro.

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")
)