Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta página descreve como o mapeamento de colunas Delta Lake permite alterações apenas de metadados para marcar colunas como eliminadas ou renomeadas sem reescrever ficheiros de dados.
Azure Databricks suporta mapeamento de colunas para tabelas Delta Lake. O mapeamento de colunas permite alterações apenas de metadados para marcar colunas como eliminadas ou renomeadas sem reescrever ficheiros de dados. O mapeamento de colunas também permite usar caracteres não permitidos pelo Parquet em nomes de colunas, como espaços. Isto permite-te ingerir diretamente dados CSV ou JSON na Delta sem renomear colunas.
Pré-requisitos e limitações
Antes de ativar o mapeamento de colunas, compreenda as seguintes limitações:
- Tabelas com mapeamento de colunas ativada só podem ser lidas no Databricks Runtime 10.4 LTS e superiores
- Ao ativar o mapeamento de colunas, poderá haver problemas.
- Cargas de trabalho legadas que dependem dos nomes dos diretórios para a leitura das tabelas Delta. Tabelas particionadas com mapeamento de colunas usam prefixos aleatórios em vez de nomes de colunas para diretórios de partições. Veja se Delta Lake e Parquet compartilham estratégias de particionamento.
- Operações a jusante usando Delta alteram o feed de dados. Veja Limitações do feed de alterações de dados para tabelas com mapeamento de colunas.
- Leituras em streaming a partir da tabela Delta, incluindo nas Lakeflow Spark Declarative Pipelines. Ver Mapeamento de colunas e streaming.
Ativar o mapeamento de colunas
Use o seguinte comando para habilitar o mapeamento de coluna:
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name'
)
O mapeamento de colunas requer os seguintes protocolos Delta:
- Reader versão 2 ou superior
- Writer versão 5 ou superior
Consulte Compatibilidade de recursos e protocolos do Delta Lake.
Renomear uma coluna
Nota
Disponível em Databricks Runtime 10.4 LTS e superior.
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 mais exemplos, veja Atualizar esquema da tabela.
Eliminar colunas
Nota
Disponível em Databricks Runtime 11.3 LTS e superior.
Quando o mapeamento de colunas está habilitado para uma tabela Delta, você pode soltar 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 mais detalhes, consulte Atualizar esquema da tabela.
Caracteres suportados nos nomes das colunas
Quando o mapeamento de colunas está ativado para uma tabela Delta, pode incluir espaços e qualquer um destes caracteres nos nomes das colunas: ,;{}()\n\t=.
Remover mapeamento de colunas
Pode remover o mapeamento de colunas de uma tabela usando o seguinte comando:
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')
Advertência
Remover o mapeamento de colunas reescreve todos os ficheiros de dados para substituir nomes físicos de colunas por nomes lógicos. Esta operação não suporta resolução de conflitos ao nível de linha ou física.
Operações de escrita concorrentes causarão um ConcurrentModificationException. Antes de remover o mapeamento de colunas:
- Suspender todas as operações de escrita simultâneas, incluindo trabalhos de streaming e pipelines ETL.
- Desative a otimização preditiva na mesa.
- No caso de tabelas grandes, planeie esta operação em períodos de menor atividade.
Para uma abordagem alternativa que suporte o rebaixamento do protocolo de tabela, consulte Desativar o mapeamento de colunas.
Desativar mapeamento de colunas
No Databricks Runtime 15.3 e versões superiores, pode usar o comando DROP FEATURE para remover o mapeamento de colunas e baixar o protocolo da tabela. Use esta abordagem em vez de remover o mapeamento de colunas se precisar de fazer downgrade das versões do protocolo para compatibilidade com leitores mais antigos.
Importante
Eliminar o mapeamento de colunas de uma tabela não remove os prefixos aleatórios usados nos nomes de diretórios para tabelas particionadas.
Consulte Eliminar uma tabela Delta Lake e reduzir o protocolo da tabela.
Mapeamento de colunas e streaming
Você pode fornecer um local de rastreamento de esquema para ativar o streaming a partir de tabelas Delta com mapeamento de colunas ativado. Isto resolve um problema em que alterações não aditivas no esquema podem resultar em fluxos quebrados.
Cada fluxo lido em relação a uma fonte de dados deve ter sua própria schemaTrackingLocation especificação. Para gravação de streaming, o especificado schemaTrackingLocation deve estar contido no diretório especificado para a checkpointLocation tabela de destino. Para cargas de trabalho de streaming que combinam dados de várias tabelas Delta de origem, você deve especificar diretórios exclusivos dentro da checkpointLocation para cada tabela de origem.
Ativar o mapeamento de colunas numa tarefa em execução
Importante
Para permitir o mapeamento de colunas numa tarefa de streaming em curso:
- Pára com o trabalho
- Ativar o mapeamento de colunas na tabela
- Reiniciar o trabalho (primeiro reinício - inicializa o mapeamento de colunas)
- Reiniciar o trabalho novamente (segundo reinício - permite alterações no esquema)
Quaisquer alterações adicionais no esquema (adicionar ou eliminar colunas, alterar tipos de colunas) também requerem reiniciar o trabalho.
Especificar a localização do rastreio do esquema
O exemplo seguinte mostra como especificar a schemaTrackingLocation para uma leitura em streaming a partir 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")
)