Hur hanterar Azure Databricks Delta Lake-funktionskompatibilitet?
Delta Lake är ett oberoende projekt med öppen källkod under styrning av Linux Foundation. Databricks introducerar stöd för nya Delta Lake-funktioner och optimeringar som bygger på Delta Lake i Databricks Runtime-versioner.
Azure Databricks-optimeringar som utnyttjar Delta Lake-funktioner respekterar de protokoll som används i OSS Delta Lake för kompatibilitet.
Många Azure Databricks-optimeringar kräver aktivering av Delta Lake-funktioner i en tabell. Delta Lake-funktioner är alltid bakåtkompatibla, så tabeller som skrivits av en lägre Databricks Runtime-version kan alltid läsas och skrivas av en högre Databricks Runtime-version. Om du aktiverar vissa funktioner bryts kompatibiliteten framåt med arbetsbelastningar som körs i en lägre Databricks Runtime-version. För funktioner som bryter kompatibiliteten framåt måste du uppdatera alla arbetsbelastningar som refererar till de uppgraderade tabellerna så att de använder en kompatibel Databricks Runtime-version.
Kommentar
Du kan släppa deletionVectors
, v2Checkpoint
, columnMapping
och typeWidening-preview
på Azure Databricks. Se Drop Delta table features (Ta bort deltatabellfunktioner).
Viktigt!
Alla protokolländringsåtgärder står i konflikt med alla samtidiga skrivningar.
Direktuppspelningsläsningar misslyckas när de påträffar en incheckning som ändrar tabellmetadata. Om du vill att strömmen ska fortsätta måste du starta om den. Rekommenderade metoder finns i Produktionsöverväganden för strukturerad direktuppspelning.
Vilka Delta Lake-funktioner kräver Databricks Runtime-uppgraderingar?
Följande Delta Lake-funktioner bryter framåtkompatibiliteten. Funktioner aktiveras tabell för tabell. Den här tabellen visar den lägsta Databricks Runtime-versionen som fortfarande stöds av Azure Databricks.
Funktion | Kräver Databricks Runtime-version eller senare | Dokumentation |
---|---|---|
CHECK Begränsningar |
Databricks Runtime 9.1 LTS | Ange en CHECK-begränsning i Azure Databricks |
Ändra dataflöde | Databricks Runtime 9.1 LTS | Använda Delta Lake-ändringsdataflöde i Azure Databricks |
Genererade kolumner | Databricks Runtime 9.1 LTS | Delta Lake-genererade kolumner |
Kolumnmappning | Databricks Runtime 10.4 LTS | Byt namn på och släpp kolumner med Delta Lake-kolumnmappning |
Identitetskolumner | Databricks Runtime 10.4 LTS | Använda identitetskolumner i Delta Lake |
Tabellfunktioner | Databricks Runtime 12.2 LTS | Vad är tabellfunktioner? |
Borttagningsvektorer | Databricks Runtime 12.2 LTS | Vad är borttagningsvektorer? |
TidsstämpelNTZ | Databricks Runtime 13.3 LTS | TIMESTAMP_NTZ typ |
Uniform | Databricks Runtime 13.3 LTS | Använda UniForm för att läsa Delta-tabeller med Iceberg-klienter |
Flytande klustring | Databricks Runtime 13.3 LTS | Använda flytande klustring för Delta-tabeller |
Radspårning | Databricks Runtime 14.1 | Använda radspårning för Delta-tabeller |
Typbreddning | Databricks Runtime 15.2 | Typbreddning |
Variant | Databricks Runtime 15.3 | Variantstöd i Delta Lake |
Se Viktig information om versioner och kompatibilitet för Databricks Runtime.
Kommentar
Delta Live Tables och Databricks SQL uppgraderar automatiskt körningsmiljöer med regelbundna versioner för att stödja nya funktioner. Se Viktig information om Delta Live Tables och versionsuppgraderingsprocessen och Viktig information om Databricks SQL.
Vad är en tabellprotokollspecifikation?
Varje Delta-tabell har en protokollspecifikation som anger den uppsättning funktioner som tabellen stöder. Protokollspecifikationen används av program som läser eller skriver tabellen för att avgöra om de kan hantera alla funktioner som tabellen stöder. Om ett program inte vet hur man hanterar en funktion som visas som stöds i protokollet i en tabell kan programmet inte läsa eller skriva tabellen.
Protokollspecifikationen är uppdelad i två komponenter: läsprotokollet och skrivprotokollet.
Varning
De flesta protokollversionsuppgraderingar är oåterkalleliga och uppgradering av protokollversionen kan bryta de befintliga Delta Lake-tabellläsarna, författarna eller båda. Databricks rekommenderar att du endast uppgraderar specifika tabeller när det behövs, till exempel för att välja nya funktioner i Delta Lake. Du bör också kontrollera att alla dina nuvarande och framtida produktionsverktyg stöder Delta Lake-tabeller med den nya protokollversionen.
Protokollnedgraderingar är tillgängliga för vissa funktioner. Se Drop Delta table features (Ta bort deltatabellfunktioner).
Läs protokoll
Läsprotokollet visar alla funktioner som en tabell stöder och som ett program måste förstå för att kunna läsa tabellen korrekt. Om du uppgraderar läsprotokollet i en tabell måste alla läsarprogram ha stöd för de tillagda funktionerna.
Viktigt!
Alla program som skriver till en Delta-tabell måste kunna skapa en ögonblicksbild av tabellen. Därför måste arbetsbelastningar som skriver till Delta-tabeller respektera både läsar- och skrivarprotokollkrav.
Om du stöter på ett protokoll som inte stöds av en arbetsbelastning i Azure Databricks måste du uppgradera till en högre Databricks Runtime som stöder det protokollet.
Skrivprotokoll
Skrivprotokollet visar alla funktioner som en tabell stöder och som ett program måste förstå för att kunna skriva till tabellen korrekt. Om du uppgraderar skrivprotokollet för en tabell måste alla skrivarprogram ha stöd för de tillagda funktionerna. Det påverkar inte skrivskyddade program, såvida inte läsprotokollet också uppgraderas.
Vilka protokoll måste uppgraderas?
Vissa funktioner kräver uppgradering av både läsprotokollet och skrivprotokollet. Andra funktioner kräver endast uppgradering av skrivprotokollet.
Till exempel är stöd för CHECK
begränsningar en skrivprotokollfunktion: endast att skriva program behöver känna CHECK
till begränsningar och framtvinga dem.
Kolumnmappning kräver däremot att både läs- och skrivprotokollen uppgraderas. Eftersom data lagras på olika sätt i tabellen måste läsarprogram förstå kolumnmappning så att de kan läsa data korrekt.
Lägsta läsare och skrivarversioner
Kommentar
Du måste explicit uppgradera tabellprotokollversionen när du aktiverar kolumnmappning.
När du aktiverar Delta-funktioner i en tabell uppgraderas tabellprotokollet automatiskt. Databricks rekommenderar att du inte ändrar minReaderVersion
egenskaperna och minWriterVersion
tabellen. Att ändra dessa tabellegenskaper förhindrar inte protokolluppgradering. Om du anger dessa värden till ett lägre värde nedgraderas inte tabellen. Se Drop Delta table features (Ta bort deltatabellfunktioner).
Vad är tabellfunktioner?
I Databricks Runtime 12.2 LTS och senare introducerar Delta Lake-tabellfunktioner detaljerade flaggor som anger vilka funktioner som stöds av en viss tabell. I Databricks Runtime 11.3 LTS och nedan aktiverades Delta Lake-funktioner i paket som kallas protokollversioner. Tabellfunktioner är efterföljaren till protokollversioner och är utformade med målet att förbättra flexibiliteten för klienter som läser och skriver Delta Lake. Se Vad är en protokollversion?.
Kommentar
Tabellfunktioner har krav på protokollversion. Se Funktioner efter protokollversion.
En Delta-tabellfunktion är en markör som anger att tabellen stöder en viss funktion. Varje funktion är antingen en funktion för skrivprotokoll (vilket innebär att den endast uppgraderar skrivprotokollet) eller en läs-/skrivprotokollfunktion (vilket innebär att både läs- och skrivprotokoll uppgraderas för att aktivera funktionen).
Mer information om tabellfunktioner som stöds i Delta Lake finns i Delta Lake-protokollet.
Ändrar tabellfunktionerna hur Delta Lake-funktioner aktiveras?
Om du bara interagerar med Delta-tabeller via Azure Databricks kan du fortsätta att spåra stöd för Delta Lake-funktioner med hjälp av minimikraven för Databricks Runtime. Azure Databricks stöder läsning av Delta-tabeller som har uppgraderats till tabellfunktioner i alla Databricks Runtime LTS-versioner, så länge alla funktioner som används av tabellen stöds av den versionen.
Om du läser och skriver från Delta-tabeller med andra system kan du behöva överväga hur tabellfunktioner påverkar kompatibiliteten, eftersom det finns en risk att systemet inte kan förstå de uppgraderade protokollversionerna.
Viktigt!
Tabellfunktioner introduceras i Delta Lake-formatet för skrivarversion 7 och läsarversion 3. Azure Databricks har backporterat kod till alla Databricks Runtime LTS-versioner som stöds för att lägga till stöd för tabellfunktioner, men endast för de funktioner som redan stöds i databricks-körningen. Det innebär att även om du kan välja att använda tabellfunktioner för att aktivera genererade kolumner och fortfarande arbeta med dessa tabeller i Databricks Runtime 9.1 LTS, stöds tabeller med identitetskolumner aktiverade (vilket kräver Databricks Runtime 10.4 LTS) fortfarande inte i databricks-körningen.
Vad är en protokollversion?
En protokollversion är ett protokollnummer som anger en viss gruppering av tabellfunktioner. I Databricks Runtime 11.3 LTS och nedan kan du inte aktivera tabellfunktioner individuellt. Protokollversioner paket en grupp med funktioner.
Deltatabeller anger en separat protokollversion för läsprotokoll och skrivprotokoll. Transaktionsloggen för en Delta-tabell innehåller information om protokollversioner som stöder Delta Lake-utveckling. Mer information finns i Granska Delta Lake-tabellinformation med beskrivande information.
Protokollversionerna paketar alla funktioner från tidigare protokoll. Se Funktioner efter protokollversion.
Kommentar
Från och med skrivarversion 7 och läsarversion 3 har Delta Lake introducerat begreppet tabellfunktioner. Med hjälp av tabellfunktioner kan du nu välja att endast aktivera de funktioner som stöds av andra klienter i ditt dataekosystem. Se Vad är tabellfunktioner?.
Funktioner efter protokollversion
I följande tabell visas lägsta protokollversioner som krävs för Delta Lake-funktioner.
Kommentar
Om du bara bryr dig om Databricks Runtime-kompatibilitet kan du läsa Vilka Delta Lake-funktioner kräver Databricks Runtime-uppgraderingar?. Deltadelning stöder endast läsning av tabeller med funktioner som kräver minReaderVersion
= 1
.
Egenskap | minWriterVersion |
minReaderVersion |
Dokumentation |
---|---|---|---|
Grundläggande funktioner | 2 | 1 | Vad är Delta Lake? |
CHECK Begränsningar |
3 | 1 | Ange en CHECK-begränsning i Azure Databricks |
Ändra dataflöde | 4 | 1 | Använda Delta Lake-ändringsdataflöde i Azure Databricks |
Genererade kolumner | 4 | 1 | Delta Lake-genererade kolumner |
Kolumnmappning | 5 | 2 | Byt namn på och släpp kolumner med Delta Lake-kolumnmappning |
Identitetskolumner | 6 | 2 | Använda identitetskolumner i Delta Lake |
Läs tabellfunktioner | 7 | 1 | Vad är tabellfunktioner? |
Skriv av tabellfunktioner | 7 | 3 | Vad är tabellfunktioner? |
Radspårning | 7 | 1 | Använda radspårning för Delta-tabeller |
Borttagningsvektorer | 7 | 3 | Vad är borttagningsvektorer? |
TidsstämpelNTZ | 7 | 3 | TIMESTAMP_NTZ typ |
Flytande klustring | 7 | 3 | Använda flytande klustring för Delta-tabeller |
Uniform | 7 | 2 | Använda UniForm för att läsa Delta-tabeller med Iceberg-klienter |
Typbreddning | 7 | 3 | Typbreddning |
Variant | 7 | 3 | Variantstöd i Delta Lake |