Radspårning i Azure Databricks

Radspårning är tillgängligt i Databricks Runtime 14.1 och senare och tilldelar stabila rad-ID:er och radincheckningsversioner till varje rad, vilket aktiverar radnivåspårning. Vissa inkrementella uppdateringar för materialiserade vyer kräver den här funktionen.

Alla Apache Iceberg v3-tabeller innehåller radspårning. Se Använda Apache Iceberg v3-funktioner. För Delta Lake-tabeller måste du uttryckligen aktivera radspårning.

Note

Om du aktiverar radspårning uppgraderas protokollet för tabellskrivare och kan påverka kompatibiliteten med externa Delta Lake-klienter. Se Delta Lake-funktionskompatibilitet och protokoll.

Aktivera radspårning i Delta Lake-tabeller

Om du vill aktivera radspårning i en Delta Lake-tabell anger du tabellegenskapen delta.enableRowTracking = true när du skapar tabellen:

CREATE TABLE table_name
TBLPROPERTIES (delta.enableRowTracking = true)
AS SELECT * FROM source_table;

Om du vill aktivera radspårning i en befintlig Delta Lake-tabell använder du följande exempel:

ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = true);

Important

Genom att aktivera radspårning på befintliga tabeller tilldelas automatiskt rad-ID:n och radernas versionsnummer till alla befintliga rader i tabellen. Den här processen kan leda till att flera nya versioner av tabellen skapas och tar lång tid att slutföra.

Warning

Om tabellen är ett mål för kontinuerliga skrivningar, till exempel strukturerade strömningsarbetsbelastningar, pausar du skrivåtgärderna innan radspårning aktiveras och återupptas när åtgärden har slutförts. Att använda ALTER TABLE för att aktivera radspårning uppdaterar tabellmetadata, vilket gör att eventuella samtidiga skrivåtgärder misslyckas med en MetadataChangedException under den tid som åtgärden pågår. Se Konfliktundantag.

Kloning av en tabell skapar en separat historik, så rad-ID:t och radincheckningsversionerna på klonade tabeller matchar inte dem i den ursprungliga tabellen.

Metadatafält

Radspårning lägger till två dolda metadatafält i tabellen. Du kan uttryckligen lägga till dessa fält i frågan för att returnera värdena.

Kolumnnamn Type Värden Explanation
_metadata.row_id Long Den unika identifieraren för raden. En rad behåller samma ID när den ändras med hjälp av ett MERGE- och UPDATE-uttalande.
_metadata.row_commit_version Long Delta-loggen eller tabellversionen där raden senast infogades eller uppdaterades. En rad tilldelas en ny version varje gång den ändras med hjälp av ett MERGE- eller UPDATE-uttalande.

Vissa åtgärder lagrar dessa metadatafält med hjälp av transaktionsloggen. Om du kör OPTIMIZE eller REORG åtgärder i en tabell med radspårning aktiverat skrivs datafiler om för att lagra dessa fält.

Inaktivera radspårning i Delta Lake-tabeller

Om du vill inaktivera radspårning i en Delta Lake-tabell anger du tabellegenskapen till false.

ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = false);

Important

Om du inaktiverar radspårning tar du inte bort motsvarande tabellfunktion och nedgraderar inte tabellprotokollversionen. Det tar inte heller bort metadatafälten från måltabellen. Om du vill ta bort tabellfunktionen helt och nedgradera protokollet använder du DROP FEATURE. Se Ta bort en Delta Lake-tabellfunktion och nedgradera tabellprotokollet.

När radspårningen har inaktiverats är de genererade rad-ID:n inte längre tillförlitliga för att spåra unika rader.

Limitations

Metadatafälten för rad-ID:n och radcommit-versioner kan inte nås vid läsning av ändringsdataflödet. Se Använda ändringsdataflöde på Azure Databricks.