Ampliação do tipo

Visualização

Esse recurso está em Public Preview em Databricks Runtime 15.2 e acima.

As tabelas com ampliação de tipo ativada permitem que o senhor altere os tipos de dados da coluna para um tipo mais amplo sem reescrever os arquivos de dados subjacentes. O senhor pode alterar os tipos de coluna manualmente ou usar a evolução do esquema para desenvolver os tipos de coluna.

O alargamento do tipo requer o Delta Lake. Todas as tabelas gerenciar Unity Catalog usam Delta Lake por default.

Alterações de tipo suportadas

O senhor pode ampliar os tipos de acordo com as seguintes regras:

Tipo de origem

Tipos mais amplos suportados

byte

short, int, long, decimal, double

short

int, long, decimal, double

int

long, decimal, double

long

decimal

float

double

decimal

decimal com maior precisão e escala

date

timestampNTZ

Para evitar a promoção acidental de valores inteiros para decimais, o senhor deve commit manualmente as alterações de tipo de byte, short, int ou long para decimal ou double.

Observação

Ao alterar qualquer tipo numérico para decimal, a precisão total deve ser igual ou maior que a precisão inicial. Se o senhor também aumentar a escala, a precisão total deverá aumentar em um valor correspondente.

A meta mínima para os tipos byte, short e int é decimal(10,0). A meta mínima para long é decimal(20,0).

Se o senhor quiser adicionar duas casas decimais a um campo com decimal(10,1), o objetivo mínimo é decimal(12,3).

As alterações de tipo são compatíveis com colunas de nível superior e campos aninhados em structs, mapas e matrizes.

Habilitar a ampliação do tipo

O senhor pode ativar a ampliação de tipo em uma tabela existente definindo a propriedade delta.enableTypeWidening table como true:

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

O senhor também pode ativar a ampliação do tipo durante a criação da tabela:

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

Importante

Quando o senhor ativa a ampliação de tipo, ele define o recurso de tabela typeWidening-preview, que atualiza os protocolos de leitura e gravação. O senhor deve usar o site Databricks Runtime 15.2 ou o acima for para interagir com tabelas com a ampliação de tipos ativada. Se os clientes externos também interagirem com a tabela, verifique se eles suportam esse recurso da tabela. Consulte Como Databricks o Delta Lake senhor pode gerenciar a compatibilidade do recurso ?

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>

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

Ampliar os tipos com a evolução automática do esquema

A evolução do esquema funciona com a ampliação do tipo para atualizar os tipos de dados nas tabelas de destino para que correspondam ao tipo de dados recebidos.

Observação

Sem a ampliação de tipos ativada, a evolução do esquema sempre tenta fazer um downcast seguro dos dados para corresponder aos tipos de coluna na tabela de destino. Se o senhor não quiser ampliar automaticamente os tipos de dados nas tabelas de destino, desative a ampliação de tipos antes de executar cargas de trabalho com a evolução do esquema ativada.

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

  • O comando usa INSERT ou MERGE INTO.

  • A execução do comando com a evolução automática do esquema ativada.

  • A tabela de destino tem a ampliação de tipo ativada.

  • O tipo de coluna de origem é mais largo do que o tipo de coluna de destino.

  • O alargamento do tipo suporta a mudança de tipo.

As incompatibilidades de tipos que não atendem a todas essas condições seguem as regras normais de imposição de esquema. Ver imposição de esquema.

Desativar o recurso de tabela de ampliação de tipos

O senhor pode evitar o alargamento acidental do tipo em tabelas habilitadas definindo a propriedade como false:

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

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

Se o senhor precisar remover completamente o recurso de tabela de alargamento 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 descartar a ampliação do tipo, todos os arquivos de dados que não estão em conformidade com o esquema de tabela atual são reescritos. Consulte Drop Delta table recurso.