Dela via


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, , decimaldouble
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, inteller long till decimal eller double.

Kommentar

När du ändrar en numerisk typ till decimalmå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, shortoch 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 eller MERGE 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).