增量從 Azure SQL 資料庫載入資料到 Azure Blob 儲存體,使用 Azure 入口網站。

適用於: Azure Data Factory Azure Synapse Analytics

秘訣

Data Factory in Microsoft Fabric 是下一代的 Azure Data Factory,擁有更簡單的架構、內建 AI 及新功能。 如果你是資料整合新手,建議先從 Fabric Data Factory 開始。 現有的 ADF 工作負載可升級至 Fabric,以存取資料科學、即時分析與報告等新能力。

在這個教學中,你會建立一個 Azure Data Factory,並搭配一條管線,將 Azure SQL Database 中的資料表載入 delta 資料到 Azure Blob 儲存。

您會在本教學課程中執行下列步驟:

  • 準備資料庫來儲存浮水印值。
  • 建立資料處理站。
  • 建立連結的服務。
  • 建立來源、接收及水印資料集。
  • 建立管線。
  • 執行管線。
  • 監視管道執行。
  • 審查結果
  • 將更多資料新增至來源。
  • 再次執行管線。
  • 監視第二次管線執行
  • 檢閱第二次執行的結果

概觀

高階解決方案圖表如下:

以累加方式載入資料

以下是建立此解決方案的重要步驟:

  1. 選取浮水印資料行。 選取來源資料存放區中的一個資料行,可用於切割每次執行時新增或更新的記錄。 一般來說,當建立或更新資料列時,這個選取的資料行 (例如,last_modify_time 或 ID) 中的資料會持續增加。 此欄中的最大值作為水印。

  2. 準備一個資料存放區以儲存水印值。 在本教學課程中,您會將水印值儲存在 SQL 資料庫中。

  3. 使用下列工作流程建立管線:

    此解決方案中的管道有下列活動:

    • 建立兩個查找活動。 ** 使用第一個查詢活動來取出最後一個水印值。 使用第二個查閱活動來取出新的水位線值。 這些浮水印值會傳給 複製活動。
    • 建立一個複製活動,用於從來源資料儲存中複製列,條件是浮水印欄位的值必須大於舊浮水印值且小於新浮水印值。 接著,將來源資料存放區中的差異資料複製至 Blob 儲存體,並建立為新的檔案。
    • 建立 StoredProcedure 活動,以更新下次執行的管線水位線值。

如果你沒有Azure訂閱,請在開始前先建立一個free帳號。

必要條件

  • Azure SQL Database。 您需要使用資料庫作為來源資料存放區。 如果你在Azure SQL Database沒有資料庫,請參考 在 Azure SQL Database建立資料庫的步驟。
  • Azure 儲存體。 您使用 Blob 儲存體作為匯出資料存放區。 如果您沒有儲存體帳戶,請參閱建立儲存體帳戶,按照步驟來建立儲存體帳戶。 建立名為 adftutorial 的容器。

在 SQL 資料庫中建立資料來源資料表

  1. 開啟 SQL Server Management Studio。 在 [伺服器總管] 中,以滑鼠右鍵按一下資料庫,然後選擇 [新增查詢]。

  2. 對 SQL 資料庫執行下列 SQL 命令,以建立名為 data_source_table 的資料表作為資料來源存放區:

    create table data_source_table
    (
        PersonID int,
        Name varchar(255),
        LastModifytime datetime
    );
    
    INSERT INTO data_source_table
        (PersonID, Name, LastModifytime)
    VALUES
        (1, 'aaaa','9/1/2017 12:56:00 AM'),
        (2, 'bbbb','9/2/2017 5:23:00 AM'),
        (3, 'cccc','9/3/2017 2:36:00 AM'),
        (4, 'dddd','9/4/2017 3:21:00 AM'),
        (5, 'eeee','9/5/2017 8:06:00 AM');
    

    在本教學課程中,您會使用 LastModifytime 作為浮水印資料行。 下表顯示資料來源存放區中的資料:

    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
    

在 SQL Database 中再建立一個資料表,用於儲存高浮水印值

  1. 對 SQL 資料庫執行下列 SQL 命令,以建立名為 watermarktable 的資料表來儲存水位線值:

    create table watermarktable
    (
    
    TableName varchar(255),
    WatermarkValue datetime,
    );
    
  2. 使用來源資料存放區的資料表名稱來設定高浮水印的預設值。 在本教學課程中,資料表名稱是 data_source_table。

    INSERT INTO watermarktable
    VALUES ('data_source_table','1/1/2010 12:00:00 AM')    
    
  3. 檢閱資料表 watermarktable 中的資料。

    Select * from watermarktable
    

    輸出:

    TableName  | WatermarkValue
    ----------  | --------------
    data_source_table | 2010-01-01 00:00:00.000
    

在 SQL 資料庫中建立預存程序

執行下列命令,在您的 SQL 資料庫中建立預存程序:

CREATE PROCEDURE usp_write_watermark @LastModifiedtime datetime, @TableName varchar(50)
AS

BEGIN

UPDATE watermarktable
SET [WatermarkValue] = @LastModifiedtime
WHERE [TableName] = @TableName

END

建立資料處理站

  1. 啟動 Microsoft Edge 或 Google Chrome網頁瀏覽器。 目前,Data Factory UI 僅支援 Microsoft Edge 與 Google Chrome 網頁瀏覽器。

  2. 在頂端功能表上,選取 [建立資源>分析>Data Factory ] :

    在“New”窗格中選擇 Data Factory

  3. 在新的資料工廠頁面中,輸入 ADFIncCopyTutorialDF 作為名稱。

    Azure Data Factory名稱必須為全球唯一。 如果您看到帶有下列錯誤的紅色驚嘆號,請變更資料處理站名稱 (例如 yournameADFIncCopyTutorialDF),然後再試一次建立。 請參閱 Data Factory - 命名規則一文,以了解 Data Factory 成品的命名規則。

    資料工廠名稱 "ADFIncCopyTutorialDF" 不可用

  4. 選擇你想要建立資料工廠的 Azure 訂閱。

  5. 針對 [資源群組],請執行下列其中一個步驟︰

  6. 針對 版本 選取 V2。

  7. 選取資料工廠的 位置 。 只有受到支援的位置會顯示在下拉式清單中。 資料工廠使用的資料儲存(Azure 儲存體、Azure SQL Database、Azure SQL 受控執行個體 等)和運算(HDInsight 等)可能位於其他區域。

  8. 按一下 建立。

  9. 建立完成之後,您會看到如圖中所示的 [Data Factory] 頁面。

     Azure Data Factory 的首頁,包含 Open Azure Data Factory Studio 圖塊。

  10. 在 Open Azure Data Factory Studio 圖塊中選擇 Open,以在獨立分頁啟動Azure Data Factory使用者介面(UI)。

建立新管線

在這個教學中,你會建立一個管線,將兩個 Lookup 活動、一個 複製活動 和一個 StoredProcedure 活動串連在同一條管線中。

  1. 在 Data Factory UI 的首頁上,按一下協調圖格。

    此螢幕擷取畫面顯示資料工廠首頁,其中 [協調] 按鈕已被醒目提示。

  2. 在 [屬性] 下的 [一般] 面板中,為 [名稱] 指定 IncrementalCopyPipeline。 然後按一下右上角的 [屬性] 圖示來摺疊面板。

  3. 讓我們新增第一個查閱活動,以取得舊的浮水印值。 在活動工具箱中展開一般,並將查閱活動拖放至管線設計工具介面。 將活動名稱變更為 LookupOldWaterMarkActivity。

    第一個查詢活動 - 名稱

  4. 切換至 [設定] 索引標籤,然後按一下 [+ 新增] 以新增來源資料集。 在此步驟中,您會建立資料集來代表浮水印資料表中的資料。 此資料表包含先前複製作業中所使用的舊浮水印。

  5. 在 New Dataset 視窗中,選擇 Azure SQL Database,並點擊 Continue。 您會看到系統為該資料集開啟新視窗。

  6. 在該資料集的 [設定屬性] 視窗中,輸入 WatermarkDataset 作為 [名稱]。

  7. 在 [已連結的服務] 視窗中,選取 [新增],然後執行下列步驟:

    1. 輸入 AzureSqlDatabaseLinkedService 作為 名稱。

    2. 在伺服器名稱選取您的伺服器。

    3. 從下拉式清單中選取您的資料庫名稱。

    4. 輸入您的使用者名稱與密碼。

    5. 若要測試您的 SQL 資料庫連線,請按一下 [測試連線]。

    6. 按一下完成。

    7. 確認已為連結服務選取 AzureSqlDatabaseLinkedService。

      新的連結服務視窗

    8. 選取 [完成]。

  8. 在 連線 索引標籤中,為 資料表 選取 [dbo].[watermarktable]。 如果您想要預覽資料表中的資料,請按一下 [預覽資料]。

    水印資料集 - 連線設定

  9. 按一下頂端的 [管線] 索引標籤或左側樹狀檢視中的管線名稱,即可切換到管線編輯器。 在 [查閱] 活動的 [屬性] 視窗中,確認已為 [來源資料集] 欄位選取 WatermarkDataset。

  10. 在活動工具箱中展開一般,並將另一個查閱活動拖放至管線設計工具介面,然後在屬性視窗的一般索引標籤中,將名稱設為 LookupNewWaterMarkActivity。 此查閱活動會從包含來源資料的資料表中取得新的浮水印值,以便將資料複製到目的地。

  11. 在第二個 [查閱] 活動的 [屬性] 視窗中,切換到 [設定] 索引標籤,然後按一下 [新增]。 您會建立資料集,以指向包含新浮水印值 (LastModifyTime 的最大值) 的來源資料表。

  12. 在 New Dataset 視窗中,選擇 Azure SQL Database,並點擊 Continue。

  13. 在 [設定屬性] 視窗中,輸入 [SourceDataset] 作為 [名稱]。 選取 AzureSqlDatabaseLinkedService 作為 連結服務。

  14. 選取 [dbo].[data_source_table] 作為資料表。 您稍後可在本教學課程中指定對此資料集的查詢。 查詢會優先於您在此步驟中指定的資料表。

  15. 選取 [完成]。

  16. 按一下頂端的 [管線] 索引標籤或左側樹狀檢視中的管線名稱,即可切換到管線編輯器。 在 查詢作業的屬性視窗中,確認來源資料集欄位已選取 SourceDataset。

  17. 為 使用查詢 字段選取 查詢,並輸入以下查詢:您只選取 data_source_table 中 LastModifytime 的最大值。 請確定您已勾選 僅限第一列。

    select MAX(LastModifytime) as NewWatermarkvalue from data_source_table
    

    第二個查找活動 - 查詢

  18. 在活動工具箱中,展開移動 & 轉換,並從活動工具箱中拖放複製活動,以及將名稱設定為 IncrementalCopyActivity。

  19. 將兩個查詢活動都連接到複製活動,方法是拖曳附加在查詢活動上的綠色按鈕到複製活動。 當你看到 複製活動 的邊框顏色變成藍色時,放開滑鼠按鈕。

    將查閱活動連線到複製活動

  20. 選擇 複製活動,並確認你在 Properties視窗中看到該活動的屬性。

  21. 在 [屬性] 視窗中切換至 [來源] 索引標籤,並執行下列步驟:

    1. 選擇 [SourceDataset] 作為 [來源資料集] 欄位。

    2. 在使用查詢欄位中選取查詢。

    3. 為 [查詢] 欄位輸入下列 SQL 查詢。

      select * from data_source_table where LastModifytime > '@{activity('LookupOldWaterMarkActivity').output.firstRow.WatermarkValue}' and LastModifytime <= '@{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}'
      

      複製活動 - 來源

  22. 切換至 [Sink] 索引標籤,然後在 [Sink 資料集] 欄位中按一下 [+ 新增]。

  23. 在這個教學中,接收端資料儲存的類型是 Azure Blob 儲存體。 因此,請選擇 Azure Blob 儲存體,並在 New Dataset 視窗中點選 Continue。

  24. 在 [選取格式] 視窗中,選取您資料的格式類型,然後按一下 [繼續]。

  25. 在 [設定屬性] 視窗中,輸入 SinkDataset 作為 [名稱]。 對於 連線服務,選取 + 新增。 在這個步驟中,你會建立一個連線(連結服務)到你的 Azure Blob 儲存體。

  26. 在 New Linked Service (Azure Blob 儲存體) 視窗中,請執行以下步驟:

    1. 輸入 AzureStorageLinkedService 作為 名稱。
    2. 請選擇您的Azure 儲存體帳號儲存帳號名稱。
    3. 測試連線,然後按一下 [完成]。
  27. 在設定屬性視窗中,確認已為已連結的服務選取AzureStorageLinkedService。 然後選取 [完成]。

  28. 移至 SinkDataset 的 [連線] 索引標籤,然後執行下列步驟:

    1. 在 [檔案路徑] 欄位中,輸入 adftutorial/incrementalcopy。 adftutorial 是 blob 容器名稱而 incrementalcopy 是資料夾名稱。 此程式碼片段假設您在 Blob 儲存體中有一個名為 adftutorial 的 Blob 容器。 建立容器 (若不存在),或設為現有容器的名稱。 Azure Data Factory 會自動建立輸出資料夾 incrementalcopy,如果不存在的話。 您也可以對檔案路徑使用 [瀏覽] 按鈕來瀏覽至 blob 容器中的資料夾。
    2. 為 [檔案路徑] 欄位的 [檔案] 部分選取 [新增動態內容 [Alt+P]],然後在開啟的視窗中輸入 @CONCAT('Incremental-', pipeline().RunId, '.txt')。 然後選取 [完成]。 系統會使用運算式來動態產生此檔案名稱。 每個流水線執行都有唯一的識別碼。 複製活動 使用 run ID 來產生檔案名稱。
  29. 按一下頂端的 [管線] 索引標籤或左側樹狀檢視中的管線名稱,即可切換到管線編輯器。

  30. 在 [活動] 工具箱中展開 [一般],並將 [預存程序] 活動從 [活動] 工具箱拖放至管線設計工具介面。 將 複製 活動的綠色 (成功) 輸出連接至 預存程序 活動。

  31. 選取管線設計工具中的 [預存程序活動],將其名稱變更為 StoredProceduretoWriteWatermarkActivity。

  32. 切換至 [SQL 帳戶] 索引標籤,然後選取 [AzureSqlDatabaseLinkedService] 作為 [已連結的服務]。

  33. 切換至 [預存程序] 索引標籤,然後執行下列步驟:

    1. 針對 [預存程序名稱],選取 usp_write_watermark。

    2. 若要指定預存程序參數的值,請按一下 [匯入參數],然後輸入參數的下列值:

      名稱 類型 值
      最後修改時間 日期時間 @{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}
      表格名稱 繩子 @{activity('LookupOldWaterMarkActivity').output.firstRow.TableName}

      預存程式活動 - 預存程序設定

  34. 若要驗證管線設定,請按一下工具列上的 [驗證]。 確認沒有任何驗證錯誤。 若要關閉 [管線驗證報告] 視窗,請按一下 >>。

  35. 透過點選 全部發佈按鈕,發佈實體(連結服務、資料集及管線)至Azure Data Factory服務。 請等候直至您看見成功發佈的訊息。

觸發管線執行

  1. 按一下工具列上的 [新增觸發程序],然後按一下 [立即觸發]。

  2. 在管線執行視窗中,選取完成。

監視管道運行

  1. 切換至左側的 [監視] 頁籤。 您可以查看由手動觸發器觸發的管道運行狀態。 您可以使用 [管線名稱] 資料行下的連結來檢視執行詳細資料,以及重新執行管線。

  2. 若要查看與管線執行相關聯的活動執行,請選取管線名稱資料行下的連結。 如需有關活動執行的詳細資料,請選取 [活動名稱] 資料行下的 [詳細資料] 連結 (眼鏡圖示)。 選取頂端的 [所有管線執行] 以回到管線執行檢視。 若要重新整理檢視,請選取 [重新整理]。

檢閱結果

  1. 使用像 Azure 儲存體總管 等工具連接您的 Azure 儲存體 帳號。 確認輸出檔案已建立於 adftutorial 容器的 incrementalcopy 資料夾中。

    第一個輸出檔

  2. 開啟輸出檔,請注意,所有的資料都會從 data_source_table 複製到 blob 檔案。

    1,aaaa,2017-09-01 00:56:00.0000000
    2,bbbb,2017-09-02 05:23:00.0000000
    3,cccc,2017-09-03 02:36:00.0000000
    4,dddd,2017-09-04 03:21:00.0000000
    5,eeee,2017-09-05 08:06:00.0000000
    
  3. 檢查 watermarktable 中的最新值。 您會看到水位線值已更新。

    Select * from watermarktable
    

    輸出如下:

    | TableName | WatermarkValue |
    | --------- | -------------- |
    | data_source_table | 2017-09-05	8:06:00.000 |
    

將更多資料新增至來源

將新資料插入您的資料庫 (資料來源存放區) 中。

INSERT INTO data_source_table
VALUES (6, 'newdata','9/6/2017 2:23:00 AM')

INSERT INTO data_source_table
VALUES (7, 'newdata','9/7/2017 9:01:00 AM')

您的資料庫中更新的資料如下:

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 | newdata | 2017-09-06 02:23:00.000
7 | newdata | 2017-09-07 09:01:00.000

觸發另一個流程執行

  1. 切換至 [編輯] 索引標籤。如果管線沒有在設計器中開啟,請在樹狀檢視中按一下它。

  2. 按一下工具列上的 [新增觸發程序],然後按一下 [立即觸發]。

監視第二次管線執行

  1. 切換至左側的 [監視] 頁籤。 您可以查看由手動觸發器觸發的管道運行狀態。 您可以使用 管線名稱 資料行下的連結來查看活動詳細資料和重新執行管線。

  2. 若要查看與管線執行相關聯的活動執行,請選取管線名稱資料行下的連結。 如需有關活動執行的詳細資料,請選取 [活動名稱] 資料行下的 [詳細資料] 連結 (眼鏡圖示)。 選取頂端的 [所有管線執行] 以回到管線執行檢視。 若要重新整理檢視,請選取 [重新整理]。

確認第二個輸出

  1. 在 blob 儲存體中,您會看到已建立另一個檔案。 在本教學課程中,新的檔案名稱是 Incremental-<GUID>.txt。 開啟該檔案,您會在其中看到兩列記錄。

    6,newdata,2017-09-06 02:23:00.0000000
    7,newdata,2017-09-07 09:01:00.0000000    
    
  2. 檢查 watermarktable 中的最新值。 您會看到浮水印值再次更新。

    Select * from watermarktable
    

    範例輸出:

    | TableName | WatermarkValue |
    | --------- | -------------- |
    | data_source_table | 2017-09-07 09:01:00.000 |
    

在本教學課程中,您已執行下列步驟:

  • 準備資料庫來儲存浮水印值。
  • 建立資料處理站。
  • 建立連結的服務。
  • 建立來源、接收及水印資料集。
  • 建立管線。
  • 執行管線。
  • 監視管道執行。
  • 審查結果
  • 將更多資料新增至來源。
  • 再次執行管線。
  • 監視第二次管線執行
  • 檢閱第二次執行的結果

在此教學課程中,管線將資料從 SQL 資料庫中的單一資料表複製到 Blob 儲存體。 請繼續以下教學,學習如何將 SQL Server 資料庫中多個資料表的資料複製到 SQL 資料庫。