Dela via


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

  1. 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
    
  2. 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')
    
  3. 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
    
  4. Gå till deltakopian från databasmallen . Skapa en ny anslutning till källdatabasen som du vill kopiera data från.

    Skärmbild som visar skapandet av en ny anslutning till källtabellen.

  5. Skapa en ny anslutning till måldatalagret som du vill kopiera data till.

    Skärmbild som visar skapandet av en ny anslutning till måltabellen.

  6. Skapa en ny anslutning till den externa kontrolltabellen och lagrade proceduren som du skapade i steg 2 och 3.

    Skärmbild som visar skapandet av en ny anslutning till kontrolltabellens datalager.

  7. Välj Använd denna mall.

  8. Du ser den tillgängliga pipelinen enligt följande exempel:

    Skärmbild som visar pipelinen.

  9. 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.

    Skärmbild som visar var du anger aktiviteten för lagrad procedur.

  10. Skriv innehållet @{activity('LookupCurrentWaterMark').output.firstRow.NewWatermarkValue} och välj sedan Slutför.

    Skärmbild som visar var innehållet ska skrivas för parametrarna i den lagrade proceduren.

  11. Välj Felsök, ange Parametrar och välj sedan Slutför.

    Skärmbild som visar knappen Felsök.

  12. Resultat som liknar följande exempel visas:

    Sreenshot som visar resultatet av pipelinekörningen.

  13. 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')
    
  14. 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.

  15. (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.

    Skärmbild som visar var polybasen ska konfigureras.