Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Funktionen create_auto_cdc_from_snapshot_flow skapar ett flöde som använder Lakeflow-pipelines för att ändra datainsamlingsfunktioner (CDC) för att bearbeta källdata från ögonblicksbilder av databaser. Se Så här fungerar AUTO CDC FRÅN SNAPSHOT.
Anmärkning
Den här funktionen ersätter den tidigare funktionen apply_changes_from_snapshot(). De två funktionerna har samma signatur. Databricks rekommenderar att du uppdaterar för att använda det nya namnet.
Viktigt!
Du måste ha en måltabell för strömmande data för den här åtgärden. Om du vill skapa den obligatoriska måltabellen kan du använda funktionen create_streaming_table().
Syntax
from pyspark import pipelines as dp
dp.create_auto_cdc_from_snapshot_flow(
target = "<target-table>",
source = Any,
keys = ["key1", "key2", "keyN"],
stored_as_scd_type = "1",
track_history_column_list = None,
track_history_except_column_list = None,
once = False
)
Anmärkning
För AUTO CDC FROM SNAPSHOT bearbetning är standardbeteendet att infoga en ny rad när en matchande post med samma nyckel(er) inte finns i målet. Om det finns en matchande post uppdateras den endast om något av värdena på raden har ändrats. Rader med nycklar som finns i målet men som inte längre finns i källan tas bort.
Mer information om CDC-bearbetning med ögonblicksbilder finns i API:er för AUTOMATISK CDC: Förenkla insamling av ändringsdata med pipelines. För exempel på användning av create_auto_cdc_from_snapshot_flow() funktionen, se exempel på periodisk snapshot-intagning, historisk snapshot-intagning och SCD typ 1-backfill .
Parameterar
| Parameter | Typ | Description |
|---|---|---|
target |
str |
Obligatoriskt. Namnet på tabellen som ska uppdateras. Du kan använda funktionen create_streaming_table() för att skapa måltabellen innan du create_auto_cdc_from_snapshot_flow() kör funktionen. |
source |
str eller lambda function |
Obligatoriskt. Antingen namnet på en tabell eller vy som ska ögonblicksbildas regelbundet, eller en Python lambda-funktion som returnerar DataFrame-ögonblicksbilden som ska bearbetas, samt ögonblicksbildversionen. Se Implementera source argumentet. |
keys |
list |
Obligatoriskt. Kolumnen eller kombinationen av kolumner som unikt identifierar en rad i källdata. Detta används för att identifiera vilka CDC-händelser som gäller för specifika poster i måltabellen. Du kan ange något av följande:
|
stored_as_scd_type |
str eller int |
Om poster ska lagras som SCD-typ 1 eller SCD-typ 2. Ange till 1 för SCD typ 1 eller 2 för SCD typ 2. Standardvärdet är SCD typ 1. |
track_history_column_list eller track_history_except_column_list |
list |
Ett urval av utdatakolumner som ska spåras i historiksyfte i måltabellen. Använd track_history_column_list för att ange den fullständiga listan över kolumner som ska spåras. Använd track_history_except_column_list för att ange vilka kolumner som ska undantas från spårning. Du kan deklarera antingen värdet som en lista med strängar eller som Spark SQL-funktioner col() :
Argument för col() funktioner kan inte innehålla kvalificerare. Du kan till exempel använda col(userId), men du kan inte använda col(source.userId). Standardvärdet är att inkludera alla kolumner i måltabellen när inget track_history_column_list eller track_history_except_column_list argument skickas till funktionen. |
once |
bool |
Om man ska köra snapshot-flödet bara en gång. När True, hoppas flödet över under efterföljande inkrementella uppdateringar efter att det framgångsrikt har kommitterats. En fullständig uppdatering av målet kör flödet igen. Använd detta alternativ för en engångsladdning eller backfill av snapshot. Standardvärdet är False. |
Notes
För SCD Type 1-mål i utlösta pipelines kan ett create_auto_cdc_from_snapshot_flow() flöde dela ett mål med ett eller flera AUTO CDC flöden definierade i Python eller SQL. Följande krav gäller:
- Ge varje
AUTO CDCflöde ett unikt namn. - Använd samma antal nycklar i samma ordning för alla flöden. Snapshot-flödesnyckelnamn jämförs kasuskänsligt med
AUTO CDCnyckelnamn. FleraAUTO CDCflöden måste använda identiska nyckelnamn och kapslingar. - Använd exakt samma datatyp för snapshot-versionen och sekvenskolumnen för varje
AUTO CDCflöde. - Definiera inte förväntningar på flödet
AUTO CDC FROM SNAPSHOT. - Använd inte
IGNORE NULL UPDATES. I Python, sätt inte ,ignore_null_updates_column_list, ellerignore_null_updates_except_column_listpå flödenacreate_auto_cdc_flow().ignore_null_updates - Om du lägger till ett
AUTO CDCflöde till ett befintligtAUTO CDC FROM SNAPSHOTmål får målet inte innehålla användarkolumner vars namn krockar med reserveradeAUTO CDCsystemkolumner. - Använd inte detta mönster för SCD typ 2 eller bitemporala mål.
För ett exempel, se Lägg till en backfill till en AUTO CDC SCD Typ 1-tabell.
source Implementera argumentet
Funktionen create_auto_cdc_from_snapshot_flow() innehåller source argumentet . För bearbetning av historiska ögonblicksbilder source förväntas argumentet vara en Python lambda-funktion som returnerar två värden till create_auto_cdc_from_snapshot_flow() funktionen: en Python DataFrame som innehåller de ögonblicksbildsdata som ska bearbetas och en ögonblicksbildversion.
Den första anropelsen av funktionen måste returnera en snapshot DataFrame och version. Om den första anropelsen returnerar None, misslyckas pipelineuppdateringen. Efter att minst en snapshot har behandlats, returnera None för att indikera att inga ytterligare snapshots är tillgängliga.
Följande är signaturen för lambda-funktionen:
lambda Any => Optional[(DataFrame, Any)]
- Argumentet till lambda-funktionen är den senast bearbetade ögonblicksbildversionen.
- Returvärdet för lambda-funktionen är
Noneeller en tuppeln med två värden: Det första värdet för tuppeln är en DataFrame som innehåller ögonblicksbilden som ska bearbetas. Det andra värdet för tuppeln är den ögonblicksbildsversion som representerar ögonblicksbildens logiska ordning.
Ett exempel som implementerar och anropar lambda-funktionen:
def next_snapshot_and_version(latest_snapshot_version: Optional[int]) -> Tuple[DataFrame, Optional[int]]:
if latest_snapshot_version is None:
return (spark.read.load("filename.csv"), 1)
else:
return None
create_auto_cdc_from_snapshot_flow(
# ...
source = next_snapshot_and_version,
# ...
)
Lakeflow-pipelines-körningen utför följande steg varje gång pipelinen som innehåller create_auto_cdc_from_snapshot_flow() funktionen utlöses:
- Kör
next_snapshot_and_versionfunktionen för att läsa in nästa ögonblicksbilds-DataFrame och motsvarande ögonblicksbildsversion. - Om den första anropelsen inte returnerar någon DataFrame misslyckas uppdateringen. Om en senare anrop inte returnerar någon DataFrame, avslutas körningen och pipelineuppdateringen markeras som slutförd.
- Identifierar ändringarna i den nya ögonblicksbilden och tillämpar dem stegvis på måltabellen.
- Återgår till steg 1 för att läsa in nästa ögonblicksbild och dess version.