Ampliação de tipo

Importante

Esse recurso está em Visualização pública no Databricks Runtime 15.2 e superior.

Tabelas com ampliação de tipo habilitada permitem alterar tipos de dados de coluna para um tipo mais amplo sem reescrever arquivos de dados subjacentes. Você pode alterar os tipos de coluna manualmente ou usar a evolução do esquema para evoluir tipos de coluna.

A ampliação de tipo requer Delta Lake. Todas as tabelas gerenciadas do Catálogo do Unity usam o Delta Lake por padrão.

Alterações de tipo com suporte

Você pode ampliar os tipos de acordo com as seguintes regras:

Tipo de origem Tipos mais amplos com suporte
byte short, int, long
short int, long
int long
float double
decimal decimal com maior precisão e a mesma escala
date timestampNTZ

Há suporte para alterações de tipo para colunas de nível superior e campos aninhados dentro de structs, mapas e matrizes.

Habilitar ampliação de tipo

Você pode habilitar a ampliação de tipo em uma tabela existente definindo a propriedade da tabela delta.enableTypeWidening como true:

  ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true')

Você também pode habilitar a ampliação de tipo durante a criação da tabela:

  CREATE TABLE T(c1 INT) TBLPROPERTIES('delta.enableTypeWidening' = 'true')

Importante

Quando você habilita a ampliação de tipo, ele define o recurso de tabela typeWidening-preview, que atualiza os protocolos de leitor e gravador. Você deve usar o Databricks Runtime 15.2 ou superior para interagir com tabelas com a ampliação de tipo habilitada. Se os clientes externos também interagirem com a tabela, verifique se eles dão suporte a esse recurso de tabela. Confira Como o Azure Databricks gerencia a compatibilidade de recursos do Delta Lake?

Aplicar manualmente uma alteração de tipo

Use o comando ALTER COLUMN para alterar manualmente os tipos:

ALTER TABLE <table_name> ALTER COLUMN <col_name> TYPE <new_type>

Esta operação atualiza o esquema de tabela sem reescrever os arquivos de dados subjacentes.

Ampliar tipos com evolução automática de esquema

A evolução do esquema funciona com a ampliação de tipos para atualizar tipos de dados em tabelas de destino para corresponder ao tipo de dados de entrada.

Observação

Sem a ampliação de tipo habilitada, a evolução do esquema sempre tenta reduzir dados com segurança para corresponder aos tipos de coluna na tabela de destino. Se você não quiser ampliar automaticamente os tipos de dados em suas tabelas de destino, desabilite a ampliação de tipo antes de executar cargas de trabalho com a evolução do esquema habilitada.

Para usar a evolução do esquema para ampliar o tipo de dados de uma coluna, você deve atender às seguintes condições:

  • O comando usa INSERT ou MERGE INTO.
  • O comando é executado com a evolução automática do esquema habilitada.
  • A tabela de destino tem a ampliação de tipo habilitada.
  • O tipo de coluna de origem é maior que o tipo de coluna de destino.
  • A ampliação de tipo dá suporte à alteração de tipo.

As incompatibilidades de tipo que não atendem a todas essas condições seguem regras normais de imposição de esquema. Consulte Imposição do esquema.

Desabilitar o recurso de tabela de ampliação de tipo

Você pode impedir a ampliação acidental de tipo em tabelas habilitadas definindo a propriedade como false:

  ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'false')

Essa configuração impede alterações futuras de tipo na tabela, mas não remove o recurso de tabela de ampliação de tipo ou os tipos de desfazer que foram alterados.

Se você precisar remover completamente os recursos de tabela de ampliação de tipo, poderá usar o comando DROP FEATURE, conforme mostrado no exemplo a seguir:

 ALTER TABLE <table-name> DROP FEATURE 'typeWidening-preview' [TRUNCATE HISTORY]

Ao remover a ampliação de tipo, todos os arquivos de dados que não estão em conformidade com o esquema de tabela atual são reescritos. Consulte Remover os recursos da tabela Delta.