Ampliare il tipo

Importante

Questa funzionalità è disponibile in anteprima pubblica in Databricks Runtime 15.2 e versioni successive.

Le tabelle con tipo esteso abilitato consentono di modificare i tipi di dati delle colonne in un tipo più ampio senza riscrivere i file di dati sottostanti. È possibile modificare manualmente i tipi di colonna o usare l'evoluzione dello schema per evolvere i tipi di colonna.

L'estensione dei tipi richiede Delta Lake. Per impostazione predefinita, tutte le tabelle gestite del catalogo Unity usano Delta Lake.

Modifiche al tipo supportate

È possibile ampliare i tipi in base alle regole seguenti:

Source type Tipi più ampi supportati
byte short, int, long, decimaldouble
short int, long, decimaldouble
int long, decimal, double
long decimal
float double
decimal decimal con maggiore precisione e scala
date timestampNTZ

Per evitare la promozione accidentale dei valori integer ai decimali, è necessario eseguire manualmente il commit delle modifiche del tipo da byte, short, into long a decimal o double.

Nota

Quando si modifica un tipo numerico in decimal, la precisione totale deve essere uguale o maggiore della precisione iniziale. Se si aumenta anche la scala, la precisione totale deve aumentare di una quantità corrispondente.

La destinazione minima per bytei tipi , shorte int è decimal(10,0). La destinazione minima per long è decimal(20,0).

Se si desidera aggiungere due posizioni decimali a un campo con decimal(10,1), la destinazione minima è decimal(12,3).

Le modifiche ai tipi sono supportate per le colonne di primo livello e i campi annidati all'interno di struct, mappe e matrici.

Abilitare l'estensione del tipo

È possibile abilitare l'estensione dei tipi in una tabella esistente impostando la delta.enableTypeWidening proprietà table su true:

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

È anche possibile abilitare l'ampliamento dei tipi durante la creazione della tabella:

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

Importante

Quando si abilita l'estensione del tipo, imposta la funzionalità typeWidening-previewdi tabella , che aggiorna i protocolli lettore e writer. È necessario usare Databricks Runtime 15.2 o versione successiva per interagire con le tabelle con l'estensione del tipo abilitata. Se i client esterni interagiscono anche con la tabella, verificare che supportino questa funzionalità di tabella. Vedere How does Azure Databricks manage Delta Lake feature compatibility?.

Applicare manualmente una modifica del tipo

Usare il ALTER COLUMN comando per modificare manualmente i tipi:

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

Questa operazione aggiorna lo schema della tabella senza riscrivere i file di dati sottostanti.

Tipi di estensione con evoluzione automatica dello schema

L'evoluzione dello schema funziona con l'estensione del tipo per aggiornare i tipi di dati nelle tabelle di destinazione in modo che corrispondano al tipo di dati in ingresso.

Nota

Senza l'estensione del tipo abilitata, l'evoluzione dello schema tenta sempre di eseguire il downcast sicuro dei dati in modo che corrispondano ai tipi di colonna nella tabella di destinazione. Se non si vogliono ampliare automaticamente i tipi di dati nelle tabelle di destinazione, disabilitare l'ampliamento del tipo prima di eseguire carichi di lavoro con l'evoluzione dello schema abilitata.

Per usare l'evoluzione dello schema per ampliare il tipo di dati di una colonna, è necessario soddisfare le condizioni seguenti:

  • Il comando usa INSERT o MERGE INTO.
  • Il comando viene eseguito con l'evoluzione automatica dello schema abilitata.
  • La tabella di destinazione è abilitata per l'ampliamento del tipo.
  • Il tipo di colonna di origine è più ampio del tipo di colonna di destinazione.
  • L'estensione del tipo supporta la modifica del tipo.

Le mancate corrispondenze dei tipi che non soddisfano tutte queste condizioni seguono le normali regole di imposizione dello schema. Vedere Imposizione dello schema.

Disabilitare la funzionalità di tabella con estensione del tipo

È possibile impedire l'ampliamento accidentale dei tipi nelle tabelle abilitate impostando la proprietà su false:

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

Questa impostazione impedisce modifiche future al tipo alla tabella, ma non rimuove la funzionalità di tabella più estesa del tipo o i tipi annullati che sono stati modificati.

Se è necessario rimuovere completamente le funzionalità della tabella con estensione del tipo, è possibile usare il DROP FEATURE comando come illustrato nell'esempio seguente:

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

Quando si elimina l'estensione dei tipi, tutti i file di dati non conformi allo schema di tabella corrente vengono riscritti. Vedere Eliminare le funzionalità della tabella Delta.