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 , 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, você deve confirmar manualmente as alterações de tipos 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 você também aumentar a escala, a precisão total deverá aumentar na mesma proporção.
O objetivo mínimo para tipos byte
, short
e int
é decimal(10,0)
. O destino mínimo para long
é decimal(20,0)
.
Se você quiser adicionar duas casas decimais a um campo com decimal(10,1)
, o alvo mínimo é decimal(12,3)
.
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
ouMERGE 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.