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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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) 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
ouMERGE 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.