在複製資料工具中使用中繼資料驅動方法組建大規模的資料複製管線
適用於:Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用!
當您想要複製大量物件 (例如,上千個資料表) 或從各種來源載入資料時,適當的方法是在控制資料表中輸入具有所需複製行為的物件名稱清單,然後使用參數化管線以從控制資料表讀取相同的清單,並據此將清單套用至作業。 這樣做可以輕鬆地維護 (例如,新增/移除) 要複製的物件清單,只需在控制資料表中更新物件名稱,而無需重新部署管線。 此外,您將有單一位置,可以輕鬆地檢查使用已定義的複製行為複製的物件,以及其由哪些管線/觸發程序所複製。
ADF 中的複製資料工具可簡化組建這類中繼資料驅動資料複製管線的過程。 從精靈體驗進行直覺化流程之後,此工具可以產生參數化管線和 SQL 指令碼,讓您據此建立外部控制資料表。 在您執行產生的指令碼,以在 SQL 資料庫中建立控制資料表之後,管線會從控制資料表讀取中繼資料,並自動在複製作業上套用資料。
從複製資料工具建立中繼資料驅動複製作業
在複製資料工具中選取 [中繼資料驅動複製工作]。
您必須輸入控制資料表的連接和資料表名稱,以便產生的管線從該資料表讀取中繼資料。
輸入源資料庫的連接。 您也可以使用參數化連結服務。
選取要複製的 [資料表名稱]。
注意
如果選取表格式資料存放區,您將有機會在下一個頁面中進一步選取完整載入或差異載入。 如果選取儲存體存放區,則只能在下一頁進一步選取完整載入。 目前不支援只從儲存體存放區以累加方式載入新檔案。
選擇 [載入行為]。
提示
如果您想要在所有資料表上執行完整複本,請選取 [完整載入所有資料表]。 如果想要執行累加複製,您可以選取 [個別設定每個資料表],然後選取 [差異載入] 和浮水印資料行名稱 & 值,以針對每個資料表開始複製。
選取 [目的地資料存放區]。
在 [設定]頁面中,您可以透過 [同時複製工作數目],決定要同時從來源存放區複製資料的複製活動數目上限。 預設值為 20。
管線部署之後,您可以從 UI 複製或下載 SQL 指令碼,以建立控制資料表和預存程序。
您會看到兩個 SQL 指令碼。
- 第一個 SQL 指令碼是用來建立兩個控制資料表。 主要控制資料表會儲存資料表清單、檔案路徑或複製行為。 如果您使用參數化連結服務,連接控制資料表會儲存資料存放區的連接值。
- 第二個 SQL 指令碼是用來建立預存程序。 每次當累加複製工作完成時,它會用來更新主要控制資料表中的浮水印值。
開啟 SSMS 以連接到控制資料表伺服器,然後執行兩個 SQL 指令碼來建立控制資料表和預存程序。
查詢主要控制資料表和連接控制資料表,以檢閱其中的中繼資料。
主要控制資料表
連接控制資料表
返回至 ADF 入口網站以檢視和偵錯管線。 您會看到命名為「MetadataDrivenCopyTask_#########」所建立的資料夾。按一下具有「MetadataDrivenCopyTask###_TopLevel」的管線命名,然後按一下 [偵錯執行]。
您必須輸入下列參數:
參數名稱 描述 MaxNumberOfConcurrentTasks 您一律可以在管線執行之前變更平行複製活動數目上限。 預設值將是您在複製資料工具中輸入的值。 MainControlTableName 您一律可以變更主要控制資料表名稱,因此管線會在執行之前從該資料表取得中繼資料。 ConnectionControlTableName 您一律可以變更主要控制資料表名稱 (選擇性),因此管線會在執行之前從該資料表取得與資料存放區相關的中繼資料。 MaxNumberOfObjectsReturnedFromLookupActivity 為了避免觸達輸出查閱活動的限制,有一種方式可以定義查閱活動所傳回的物件數目上限。 在大部分情況下,不需要變更預設值。 windowStart 當您輸入動態值 (例如:yyyy/mm/dd) 作為資料夾路徑時,參數會用來將目前的觸發程序時間傳遞至管線,以填滿動態資料夾路徑。 當管線由排程觸發程序或輪轉視窗觸發程序觸發時,使用者不需要輸入此參數的值。 範例值:2021-01-25T01:49:28Z 讓觸發程序能夠運作管線。
依複製資料工具更新控制資料表
您一律可以透過新增或移除要複製的物件,或針對每個資料表變更複製行為,來直接更新控制資料表。 我們也會在複製資料工具中建立 UI 體驗,以簡化編輯控制資料表的過程。
以滑鼠右鍵按一下最上層管線:MetadataDrivenCopyTask_xxx_TopLevel,然後選取 [編輯控制資料表]。
從控制資料表選取要編輯的資料列。
移至複製資料工具的輸送量,它將為您提供新的 SQL 指令碼。 重新執行 SQL 指令碼以更新控制資料表。
注意
管線將「不會」重新部署。 新建立的 SQL 指令碼可協助您只更新控制資料表。
控制資料表
主要控制資料表
控制資料表中的每個資料列包含了要複製之單一物件的中繼資料 (例如,一個資料表)。
資料行名稱 | 描述 |
---|---|
識別碼 | 要複製物件的唯一識別碼。 |
SourceObjectSettings | 來源資料集的中繼資料。 它可以是結構描述名稱、資料表名稱等。範例如下。 |
SourceConnectionSettingsName | 連接控制資料表中來源連接設定的名稱。 此為選用項目。 |
CopySourceSettings | 複製活動中來源屬性的中繼資料。 它可以是查詢、資料分割等。範例如下。 |
SinkObjectSettings | 目的地資料集的中繼資料。 它可以是檔案名稱、資料夾路徑、資料表名稱等。範例如下。 如果指定動態資料夾路徑,變數值將不會在此寫入控制資料表之中。 |
SinkConnectionSettingsName | 連接控制資料表中目的地連接設定的名稱。 此為選用項目。 |
CopySinkSettings | 複製活動中接收屬性的中繼資料。 它可以是 preCopyScript、tableOption 等。範例如下。 |
CopyActivitySettings | 複製活動中翻譯工具屬性的中繼資料。 它用來定義資料行對應。 |
TopLevelPipelineName | 頂層管線名稱,其可用於複製此物件。 |
TriggerName | 觸發程序名稱,其可觸發管線以複製此物件。 如果偵錯執行,則其名稱為「沙箱」。 如果手動執行,則名稱為「手動」。 如果排程執行,則名稱為相關聯的觸發程序名稱。 它可以輸入多個名稱。 |
DataLoadingBehaviorSettings | 完整負載與差異負載。 |
TaskId | 依據控制資料表 (ORDER BY [TaskId] DESC) 中的 TaskId 需複製的物件順序。 如果您有大量物件要複製,但只允許複製的平行數目有限,則可以變更每個物件的 TaskId,以決定哪些物件可以較早複製。 預設值是 0。 |
CopyEnabled | 指定該項目是否在資料擷取流程中啟用。 允許的值:1 (啟用)、0 (停用)。 預設值為 1。 |
連接控制資料表
控制資料表中的每個資料列都包含資料存放區的一個連接設定。
資料行名稱 | Description |
---|---|
Name | 主要控制資料表中參數化連接的名稱。 |
ConnectionSettings | 連接設定。 它可以是資料庫名稱、伺服器名稱等。 |
Pipelines
您會看到複製資料工具所產生的三層管線。
MetadataDrivenCopyTask_xxx_TopLevel
此管線會計算在此執行中必須複製的物件總數 (資料表等),並依據允許的平行複製工作上限來產生循序批次數目,然後執行另一個管線來循序複製不同批次。
參數
參數名稱 | 描述 |
---|---|
MaxNumberOfConcurrentTasks | 您一律可以在管線執行之前變更平行複製活動數目上限。 預設值將是您在複製資料工具中輸入的值。 |
MainControlTableName | 主要控制資料表的資料表名稱。 管線會在執行之前,從此資料表取得中繼資料 |
ConnectionControlTableName | 連接控制資料表的資料表名稱 (選擇性)。 管線會在執行之前,取得與資料存放區連結相關的中繼資料 |
MaxNumberOfObjectsReturnedFromLookupActivity | 為了避免觸達輸出查閱活動的限制,有一種方式可以定義查閱活動所傳回的物件數目上限。 在大部分情況下,不需要變更預設值。 |
windowStart | 當您輸入動態值 (例如:yyyy/mm/dd) 作為資料夾路徑時,參數會用來將目前的觸發程序時間傳遞至管線,以填滿動態資料夾路徑。 當管線由排程觸發程序或輪轉視窗觸發程序觸發時,使用者不需要輸入此參數的值。 範例值:2021-01-25T01:49:28Z |
活動
活動名稱 | 活動類型 | 描述 |
---|---|---|
GetSumOfObjectsToCopy | 查詢 | 計算在此執行中必須複製的物件總數 (資料表等)。 |
CopyBatchesOfObjectsSequentially | ForEach | 依據允許的平行複製工作上限提供循序批次數目,然後執行另一個管線以循序複製不同批次。 |
CopyObjectsInOneBtach | 執行管線 | 執行另一個管線來複製一批物件。 屬於此批次的物件將會平行複製。 |
MetadataDrivenCopyTask_xxx_ MiddleLevel
此管線將複製一批物件。 屬於此批次的物件將會平行複製。
參數
參數名稱 | 描述 |
---|---|
MaxNumberOfObjectsReturnedFromLookupActivity | 為了避免觸達輸出查閱活動的限制,有一種方式可以定義查閱活動所傳回的物件數目上限。 在大部分情況下,不需要變更預設值。 |
TopLevelPipelineName | 最上層管線的名稱。 |
TriggerName | 觸發程序的名稱。 |
CurrentSequentialNumberOfBatch | 循序批次的識別碼。 |
SumOfObjectsToCopy | 複製的物件總數。 |
SumOfObjectsToCopyForCurrentBatch | 目前批次中要複製的物件數目。 |
MainControlTableName | 主要控制資料表的名稱。 |
ConnectionControlTableName | 連接控制資料表的名稱。 |
活動
活動名稱 | 活動類型 | 描述 |
---|---|---|
DivideOneBatchIntoMultipleGroups | ForEach | 將物件從單一批次分割成多個平行群組,以避免觸達查閱活動的輸出限制。 |
GetObjectsPerGroupToCopy | 查詢 | 從必須在此群組中的控制資料表取得物件 (資料表等)。 依據控制資料表 (ORDER BY [TaskId] DESC) 中的 TaskId 需複製的物件順序。 |
CopyObjectsInOneGroup | 執行管線 | 執行另一個管線以從一個群組複製物件。 屬於此群組的物件將會平行複製。 |
MetadataDrivenCopyTask_xxx_ BottomLevel
此管線會從一個群組複製物件。 屬於此群組的物件將會平行複製。
參數
參數名稱 | 描述 |
---|---|
ObjectsPerGroupToCopy | 目前群組中要複製的物件數目。 |
ConnectionControlTableName | 連接控制資料表的名稱。 |
windowStart | 它用來將目前的觸發程序時間傳遞至管線,以便在使用者設定時填滿動態資料夾路徑。 |
活動
活動名稱 | 活動類型 | 描述 |
---|---|---|
ListObjectsFromOneGroup | ForEach | 來自一個群組的清單物件,並會逐一查看每個物件到下游活動。 |
RouteJobsBasedOnLoadingBehavior | 交換器 | 檢查每個物件的載入行為。 如果是預設值或 FullLoad 案例,請執行完整載入。 如果是 DeltaLoad 案例,請透過浮水印資料行執行累加式載入以識別變更 |
FullLoadOneObject | 複本 | 在此物件上擷取完整快照集,並將其複製到目的地。 |
DeltaLoadOneObject | 複本 | 只從上次透過比較浮水印資料行中的值複製已變更資料,以便以識別變更。 |
GetMaxWatermarkValue | 查詢 | 查詢來源物件,以從浮水印資料行取得最大值。 |
UpdateWatermarkColumnValue | StoreProcedure | 將新的浮水印值寫回下次要使用的控制資料表。 |
已知的限制
- 整合執行階段名稱、資料庫類型、檔案格式類型均無法在 ADF 中參數化。 例如,如果您想要從 Oracle Server 和 SQL Server 內嵌資料,將需要兩個不同的參數化管線。 不過單一控制資料表可以由兩組管線共用。
- 透過複製資料工具,OPENJSON 會在產生的 SQL 指令碼中使用。 如果您在使用 SQL Server 來裝載控制資料表,它必須為 SQL Server 2016 (13.x) 及更新版本,才能支援 OPENJSON 函式。
相關內容
請試試下列使用「複製資料」工具的教學課程: