Typbreddning
Viktigt!
Den här funktionen finns i offentlig förhandsversion i Databricks Runtime 15.2 och senare.
Med tabeller med typbreddning aktiverat kan du ändra kolumndatatyper till en bredare typ utan att skriva om underliggande datafiler. Du kan antingen ändra kolumntyper manuellt eller använda schemautveckling för att utveckla kolumntyper.
Typbreddning kräver Delta Lake. Alla hanterade Unity Catalog-tabeller använder Delta Lake som standard.
Typändringar som stöds
Du kan bredda typerna enligt följande regler:
Source type | Bredare typer som stöds |
---|---|
byte |
short , int , long , decimal , double |
short |
int , long , decimal , double |
int |
long , , decimal double |
long |
decimal |
float |
double |
decimal |
decimal med större precision och skala |
date |
timestampNTZ |
För att undvika oavsiktlig omvandling av heltal till decimaler måste du manuellt ändra typändringar från byte
, short
, int
eller long
till decimal
eller double
.
Kommentar
När du ändrar en numerisk typ till decimal
måste den totala precisionen vara lika med eller större än startprecisionen. Om du också ökar skalan måste den totala precisionen öka med motsvarande mängd.
Det minsta målet för byte
, short
och int
typer är decimal(10,0)
. Det minsta målet för long
är decimal(20,0)
.
Om du vill lägga till två decimaler i ett fält med decimal(10,1)
är det lägsta målet decimal(12,3)
.
Typändringar stöds för kolumner och fält på den översta nivån som är kapslade i strukturer, kartor och matriser.
Aktivera typbreddning
Du kan aktivera typbreddning i en befintlig tabell genom att ange tabellegenskapen delta.enableTypeWidening
till true
:
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true')
Du kan också aktivera typbreddning när tabellen skapas:
CREATE TABLE T(c1 INT) TBLPROPERTIES('delta.enableTypeWidening' = 'true')
Viktigt!
När du aktiverar typbreddning anger den tabellfunktionen typeWidening-preview
, som uppgraderar läsar- och skrivprotokollen. Du måste använda Databricks Runtime 15.2 eller senare för att kunna interagera med tabeller med typbreddning aktiverat. Om externa klienter också interagerar med tabellen kontrollerar du att de stöder den här tabellfunktionen. Se Hur hanterar Azure Databricks funktionskompatibilitet med Delta Lake?.
Tillämpa en typändring manuellt
ALTER COLUMN
Använd kommandot för att ändra typer manuellt:
ALTER TABLE <table_name> ALTER COLUMN <col_name> TYPE <new_type>
Den här åtgärden uppdaterar tabellschemat utan att skriva om de underliggande datafilerna.
Bredda typer med automatisk schemautveckling
Schemautvecklingen fungerar med typbreddning för att uppdatera datatyper i måltabeller för att matcha typen av inkommande data.
Kommentar
Utan att typbreddning är aktiverat försöker schemautvecklingen alltid att på ett säkert sätt nedarbeta data för att matcha kolumntyper i måltabellen. Om du inte vill bredda datatyper automatiskt i dina måltabeller inaktiverar du typbreddning innan du kör arbetsbelastningar med schemautvecklingen aktiverad.
Om du vill använda schemautveckling för att bredda datatypen för en kolumn måste du uppfylla följande villkor:
- Kommandot använder
INSERT
ellerMERGE INTO
. - Kommandot körs med automatisk schemautveckling aktiverad.
- Måltabellen har typbreddning aktiverad.
- Källkolumntypen är bredare än målkolumntypen.
- Typbreddning stöder typändringen.
Typmatchningar som inte uppfyller alla dessa villkor följer normala regler för schematillämpning. Se Schemaframtvingande.
Inaktivera funktionen för typbreddning av tabell
Du kan förhindra att oavsiktlig typbreddning på aktiverade tabeller aktiveras genom att ställa in egenskapen på false
:
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'false')
Den här inställningen förhindrar framtida typändringar i tabellen, men tar inte bort den typbreddningstabellfunktion eller ångra typer som har ändrats.
Om du behöver ta bort tabellfunktionerna för typbreddning helt kan du använda DROP FEATURE
kommandot som du ser i följande exempel:
ALTER TABLE <table-name> DROP FEATURE 'typeWidening-preview' [TRUNCATE HISTORY]
När du släpper typbreddning skrivs alla datafiler som inte överensstämmer med det aktuella tabellschemat om. Se Drop Delta table features (Ta bort deltatabellfunktioner).