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.