Deltakopiering från en databas med en kontrolltabell
GÄLLER FÖR: Azure Data Factory Azure Synapse Analytics
Dricks
Prova Data Factory i Microsoft Fabric, en allt-i-ett-analyslösning för företag. Microsoft Fabric omfattar allt från dataflytt till datavetenskap, realtidsanalys, business intelligence och rapportering. Lär dig hur du startar en ny utvärderingsversion kostnadsfritt!
Den här artikeln beskriver en mall som är tillgänglig för inkrementell inläsning av nya eller uppdaterade rader från en databastabell till Azure med hjälp av en extern kontrolltabell som lagrar ett högvattenmärkesvärde.
Den här mallen kräver att schemat för källdatabasen innehåller en tidsstämpelkolumn eller inkrementell nyckel för att identifiera nya eller uppdaterade rader.
Kommentar
Om du har en tidsstämpelkolumn i källdatabasen för att identifiera nya eller uppdaterade rader, men du inte vill skapa en extern kontrolltabell som ska användas för deltakopiering, kan du i stället använda verktyget Kopiera data i Azure Data Factory för att hämta en pipeline. Verktyget använder en schemalagd utlösare som en variabel för att läsa nya rader från källdatabasen.
Om den här lösningsmallen
Den här mallen hämtar först det gamla vattenstämpelvärdet och jämför det med det aktuella vattenstämpelvärdet. Därefter kopieras endast ändringarna från källdatabasen, baserat på en jämförelse mellan de två vattenstämpelvärdena. Slutligen lagrar den det nya värdet för högvattenstämpel i en extern kontrolltabell för deltadatainläsning nästa gång.
Mallen innehåller fyra aktiviteter:
- Uppslag hämtar det gamla högvattenmärkesvärdet, som lagras i en extern kontrolltabell.
- En annan sökningsaktivitet hämtar det aktuella värdet för högvattenstämpel från källdatabasen.
- Kopiera kopierar endast ändringar från källdatabasen till målarkivet. Frågan som identifierar ändringarna i källdatabasen liknar SELECT * FROM Data_Source_Table WHERE TIMESTAMP_Column > "last high-watermark" och TIMESTAMP_Column <= "current high-watermark".
- SqlServerStoredProcedure skriver det aktuella högvattenstämpelvärdet till en extern kontrolltabell för deltakopiering nästa gång.
Mallen definierar följande parametrar:
- Data_Source_Table_Name är tabellen i källdatabasen som du vill läsa in data från.
- Data_Source_WaterMarkColumn är namnet på kolumnen i källtabellen som används för att identifiera nya eller uppdaterade rader. Typen av den här kolumnen är vanligtvis datetime, INT eller liknande.
- Data_Destination_Container är rotsökvägen till den plats där data kopieras till i målarkivet.
- Data_Destination_Directory är katalogsökvägen under roten på den plats där data kopieras till i målarkivet.
- Data_Destination_Table_Name är den plats där data kopieras till i målarkivet (gäller när "Azure Synapse Analytics" har valts som datamål).
- Data_Destination_Folder_Path är den plats där data kopieras till i mållagret (gäller när "Filsystem" eller "Azure Data Lake Storage Gen1" väljs som datamål).
- Control_Table_Table_Name är den externa kontrolltabellen som lagrar värdet för högvattenstämpel.
- Control_Table_Column_Name är kolumnen i den externa kontrolltabellen som lagrar värdet för högvattenstämpeln.
Så här använder du den här lösningsmallen
Utforska källtabellen som du vill läsa in och definiera den högvattenstämpelkolumn som kan användas för att identifiera nya eller uppdaterade rader. Typen av den här kolumnen kan vara datetime, INT eller liknande. Den här kolumnens värde ökar när nya rader läggs till. Från följande exempelkälltabell (data_source_table) kan vi använda kolumnen LastModifytime som högvattenstämpelkolumn.
PersonID Name LastModifytime 1 aaaa 2017-09-01 00:56:00.000 2 bbbb 2017-09-02 05:23:00.000 3 cccc 2017-09-03 02:36:00.000 4 dddd 2017-09-04 03:21:00.000 5 eeee 2017-09-05 08:06:00.000 6 fffffff 2017-09-06 02:23:00.000 7 gggg 2017-09-07 09:01:00.000 8 hhhh 2017-09-08 09:01:00.000 9 iiiiiiiii 2017-09-09 09:01:00.000
Skapa en kontrolltabell i SQL Server eller Azure SQL Database för att lagra högvattenstämpelvärdet för deltadatainläsning. I följande exempel är namnet på kontrolltabellen vattenstämpelbar. I den här tabellen är WatermarkValue den kolumn som lagrar värdet för högvattenstämpel och dess typ är datetime.
create table watermarktable ( WatermarkValue datetime, ); INSERT INTO watermarktable VALUES ('1/1/2010 12:00:00 AM')
Skapa en lagrad procedur i samma SQL Server- eller Azure SQL Database-instans som du använde för att skapa kontrolltabellen. Den lagrade proceduren används för att skriva det nya värdet för högvattenstämpel till den externa kontrolltabellen för deltadatainläsning nästa gång.
CREATE PROCEDURE update_watermark @LastModifiedtime datetime AS BEGIN UPDATE watermarktable SET [WatermarkValue] = @LastModifiedtime END
Gå till deltakopian från databasmallen . Skapa en ny anslutning till källdatabasen som du vill kopiera data från.
Skapa en ny anslutning till måldatalagret som du vill kopiera data till.
Skapa en ny anslutning till den externa kontrolltabellen och lagrade proceduren som du skapade i steg 2 och 3.
Välj Använd denna mall.
Du ser den tillgängliga pipelinen enligt följande exempel:
Välj Lagrad procedur. För Namn på lagrad procedur väljer du [dbo].[ update_watermark]. Välj Importera parameter och välj sedan Lägg till dynamiskt innehåll.
Skriv innehållet @{activity('LookupCurrentWaterMark').output.firstRow.NewWatermarkValue} och välj sedan Slutför.
Välj Felsök, ange Parametrar och välj sedan Slutför.
Resultat som liknar följande exempel visas:
Du kan skapa nya rader i källtabellen. Här är sql-exempelspråket för att skapa nya rader:
INSERT INTO data_source_table VALUES (10, 'newdata','9/10/2017 2:23:00 AM') INSERT INTO data_source_table VALUES (11, 'newdata','9/11/2017 9:01:00 AM')
Om du vill köra pipelinen igen väljer du Felsök, anger Parametrar och väljer sedan Slutför.
Du ser att endast nya rader kopierades till målet.
(Valfritt:) Om du väljer Azure Synapse Analytics som datamål måste du också ange en anslutning till Azure Blob Storage för mellanlagring, vilket krävs av Azure Synapse Analytics Polybase. Mallen genererar en containersökväg åt dig. När pipelinen har körts kontrollerar du om containern har skapats i Blob Storage.