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 fonte | Tipos mais amplos compatíveis | | 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.