Pular para o conteúdo principal

Renomear e soltar colunas com o mapeamento de colunas do Delta Lake

Esta página descreve como o mapeamento de colunas do Delta Lake permite alterações somente nos metadados para marcar colunas como excluídas ou renomeadas sem a necessidade de reescrever os arquivos de dados.

O Databricks oferece suporte ao mapeamento de colunas para tabelas do Delta Lake. O mapeamento de colunas permite alterações somente nos metadados para marcar colunas como excluídas ou renomeadas sem a necessidade de reescrever os arquivos de dados. O mapeamento de colunas também permite usar caracteres não permitidos pelo Parquet em nomes de colunas, como espaços. Isso permite importar dados CSV ou JSON diretamente para o Delta sem precisar renomear as colunas.

Pré-requisitos e limitações

Antes de ativar o mapeamento de colunas, entenda as seguintes limitações:

Ativar mapeamento de colunas

Use o seguinte comando para ativar o mapeamento de colunas:

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

O mapeamento de colunas requer os seguintes protocolos Delta:

  • Leitor versão 2 ou superior
  • Versão do Writer 5 ou superior

Consulte Delta Lake recurso compatibilidade e protocolos.

Renomear uma coluna

nota

Disponível em Databricks Runtime 10.4 LTS e acima.

Quando o mapeamento de colunas está ativado para uma tabela Delta, o senhor pode renomear uma coluna:

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

Para mais exemplos, consulte Atualizar esquema de tabela.

Colunas suspensas

nota

Disponível em Databricks Runtime 11.3 LTS e acima.

Quando o mapeamento de colunas está ativado para uma tabela Delta, o senhor pode eliminar uma ou mais colunas:

SQL
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 esquema da tabela.

Caracteres suportados em nomes de colunas

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

Remover mapeamento de colunas

Você pode remover o mapeamento de colunas de uma tabela usando o seguinte comando:

SQL
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')
atenção

A remoção do mapeamento de colunas reescreve todos os arquivos de dados, substituindo os nomes físicos das colunas por nomes lógicos. Esta operação não suporta resolução de conflitos em nível de linha ou físicos.

operações de gravação simultâneas causarão um ConcurrentModificationException. Antes de remover o mapeamento de colunas:

  1. pausar todas as operações de gravação simultâneas, incluindo transmissão Job e pipeline ETL .
  2. Desative a otimização preditiva na tabela.
  3. Para tabelas grandes, programe essas operações durante períodos de baixa atividade.

Para uma abordagem alternativa que suporte a redução do protocolo da tabela, consulte Desativar mapeamento de colunas.

Desativar mapeamento de colunas

No Databricks Runtime 15.3 e versões superiores, você pode usar o comando DROP FEATURE para remover o mapeamento de colunas e fazer o downgrade do protocolo da tabela. Use essa abordagem em vez de remover o mapeamento de colunas se precisar fazer o downgrade das versões do protocolo para compatibilidade com leitores mais antigos.

importante

Remover o mapeamento de colunas de uma tabela não elimina os prefixos aleatórios usados nos nomes de diretórios para tabelas particionadas.

Consulte Drop a Delta Lake table recurso e downgrade table protocol.

Mapeamento e transmissão de colunas

Você pode fornecer um local de acompanhamento de esquema para habilitar transações a partir de tabelas Delta com mapeamento de colunas ativado. Isso resolve um problema em que alterações de esquema não aditivas poderiam resultar em interrupções na transmissão.

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. Para cargas de trabalho de transmissão que combinam dados de várias tabelas de origem Delta, o senhor deve especificar diretórios exclusivos no checkpointLocation para cada tabela de origem.

Habilitar o mapeamento de colunas em um trabalho em execução

importante

Para ativar o mapeamento de colunas em um Job de transmissão em execução:

  1. Pare o trabalho
  2. Ative o mapeamento de colunas na tabela.
  3. Reinicie o trabalho (primeira reinicialização - inicializa o mapeamento de colunas)
  4. Reinicie a tarefa novamente (segunda reinicialização - permite alterações de esquema).

Quaisquer outras alterações de esquema (adicionar ou remover colunas, alterar tipos de coluna) também exigem a reinicialização do Job.

Especifique o local de envio do esquema

O exemplo a seguir mostra como especificar um schemaTrackingLocation para uma transmissão lida de uma tabela Delta com mapeamento de colunas:

Python
checkpoint_path = "/path/to/checkpointLocation"

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

Próximos passos