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:
- Tabelas com mapeamento de colunas ativado só podem ser lidas no Databricks Runtime 10.4 LTS e versões superiores.
- Habilitar o mapeamento de colunas pode causar problemas:
- Cargas de trabalho legadas que dependem de nomes de diretório para leitura de tabelas Delta. Tabelas particionadas com mapeamento de colunas usam prefixos aleatórios em vez de nomes de colunas para diretórios de partição. Veja Delta Lake e Parquet compartilham estratégias de particionamento?
- Operações downstream usando feed de dados de alteração Delta . Consulte Alterar as limitações do feed de dados para tabelas com mapeamento de colunas.
- A transmissão lê dados da tabela Delta , inclusive no pipeline declarativo LakeFlow Spark . Consulte Mapeamento e transmissão de colunas.
Ativar mapeamento de colunas
Use o seguinte comando para ativar o mapeamento de colunas:
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
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:
ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name
Para mais exemplos, consulte Atualizar esquema de tabela.
Colunas suspensas
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:
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:
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')
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:
- pausar todas as operações de gravação simultâneas, incluindo transmissão Job e pipeline ETL .
- Desative a otimização preditiva na tabela.
- 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.
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
Para ativar o mapeamento de colunas em um Job de transmissão em execução:
- Pare o trabalho
- Ative o mapeamento de colunas na tabela.
- Reinicie o trabalho (primeira reinicialização - inicializa o mapeamento de colunas)
- 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:
checkpoint_path = "/path/to/checkpointLocation"
(spark.readStream
.option("schemaTrackingLocation", checkpoint_path)
.table("delta_source_table")
.writeStream
.option("checkpointLocation", checkpoint_path)
.toTable("output_table")
)