Partilhar via


Renomear e remover colunas com mapeamento de colunas Delta Lake

O Azure Databricks dá suporte ao mapeamento de colunas para tabelas Delta Lake, o que permite alterações somente de metadados para marcar colunas como excluídas ou renomeadas sem reescrever arquivos de dados. Ele também permite que os usuários nomeiem colunas de tabela Delta usando caracteres que não são permitidos pelo Parquet, como espaços, para que os usuários possam ingerir diretamente dados CSV ou JSON em 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.

Se você usar um padrão herdado que depende de nomes de diretório para ler tabelas Delta, habilitar o mapeamento de colunas pode quebrar cargas de trabalho herdadas. As tabelas particionadas com mapeamento de colunas ativado usam prefixos aleatórios em vez de nomes de colunas para diretórios de partição. Veja se Delta Lake e Parquet compartilham estratégias de particionamento.

Ativar o mapeamento de colunas em tabelas pode interromper operações a jusante que dependem da transmissão de dados de alteração Delta. Veja Limitações do feed de alterações de dados para tabelas com mapeamento de colunas.

Habilitar o mapeamento de colunas em tabelas pode interromper leituras de streaming da tabela Delta como fonte, inclusive em Lakeflow Spark Declarative Pipelines. Consulte Streaming com mapeamento de colunas e alterações de esquema.

Ativar 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:

  • Leitor versão 2 ou superior.
  • Writer versão 5 ou superior.

Consulte Compatibilidade de recursos e protocolos do Delta Lake.

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 de uma tabela e fazer downgrade do protocolo da tabela.

Importante

Descartar o mapeamento de colunas de uma tabela não remove os prefixos aleatórios usados em nomes de diretório para tabelas particionadas.

Consulte Eliminar uma tabela Delta Lake e reduzir o protocolo da tabela.

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 obter mais exemplos, consulte Atualizar esquema de tabela Delta Lake.

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 obter mais detalhes, consulte Atualizar esquema de tabela Delta Lake.

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 desses caracteres nos nomes de coluna da tabela: ,;{}()\n\t=.

Streaming com mapeamento de colunas e alterações de esquema

Você pode fornecer um local de rastreamento de esquema para ativar o streaming a partir de tabelas Delta com mapeamento de colunas ativado. Isso supera um problema no qual alterações de esquema não aditivas 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.

Importante

Para habilitar o mapeamento de coluna em um trabalho em execução no momento, você deve parar e reiniciar o trabalho pelo menos duas vezes (ou seja, reiniciar duas vezes).

  • A primeira reinicialização inicializa o mapeamento de coluna.
  • A segunda reinicialização permite que as alterações de esquema entrem em vigor.

Quaisquer outras alterações de esquema (como adicionar ou soltar colunas ou alterar um tipo de coluna) também exigirão que você reinicie o trabalho.

A opção schemaTrackingLocation é usada para especificar o caminho para o rastreamento de 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")
)