建立在輪轉視窗上執行管線的觸發程式
適用於:Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的單一分析解決方案。 Microsoft Fabric 涵蓋從數據移動到數據科學、即時分析、商業智慧和報告等所有專案。 瞭解如何 免費啟動新的試用版 !
本文提供建立、啟動及監視輪轉視窗觸發程式的步驟。 如需觸發程式和支援類型的一般資訊,請參閱 管線執行和觸發程式。
輪轉視窗觸發程式是一種觸發程式類型,可在從指定的開始時間定期觸發,同時保留狀態。 輪轉視窗是一系列的固定大小、非重疊和連續時間間隔。 輪轉視窗觸發程式與管線具有一對一關係,而且只能參考單一管線。 輪轉視窗觸發程式是排程觸發程式的較重替代方案,為複雜案例提供一套功能(與其他輪轉視窗觸發程式的相依性、 重新執行失敗的工作 ,以及 設定管線的使用者重試)。 若要進一步瞭解排程觸發程式和輪轉視窗觸發程式之間的差異,請造訪 這裡。
Azure Data Factory 和 Synapse 入口網站體驗
- 若要在 Azure 入口網站 中建立輪轉視窗觸發程式,請選取 [觸發程式] 索引卷標,然後選取 [新增]。
- 觸發程式設定窗格開啟之後,選取 [輪轉視窗],然後定義您的輪轉視窗觸發程序屬性。
- 完成時,選取儲存。
輪轉視窗觸發程式類型屬性
輪轉視窗具有下列觸發程式類型屬性:
{
"name": "MyTriggerName",
"properties": {
"type": "TumblingWindowTrigger",
"runtimeState": "<<Started/Stopped/Disabled - readonly>>",
"typeProperties": {
"frequency": <<Minute/Hour>>,
"interval": <<int>>,
"startTime": "<<datetime>>",
"endTime": <<datetime - optional>>,
"delay": <<timespan - optional>>,
"maxConcurrency": <<int>> (required, max allowed: 50),
"retryPolicy": {
"count": <<int - optional, default: 0>>,
"intervalInSeconds": <<int>>,
},
"dependsOn": [
{
"type": "TumblingWindowTriggerDependencyReference",
"size": <<timespan - optional>>,
"offset": <<timespan - optional>>,
"referenceTrigger": {
"referenceName": "MyTumblingWindowDependency1",
"type": "TriggerReference"
}
},
{
"type": "SelfDependencyTumblingWindowTriggerReference",
"size": <<timespan - optional>>,
"offset": <<timespan>>
}
]
},
"pipeline": {
"pipelineReference": {
"type": "PipelineReference",
"referenceName": "MyPipelineName"
},
"parameters": {
"parameter1": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
},
"parameter2": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
},
"parameter3": "https://mydemo.azurewebsites.net/api/demoapi"
}
}
}
}
下表提供與輪轉視窗觸發程式週期和排程相關的主要 JSON 元素的高階概觀:
JSON 元素 | 描述 | 類型 | 允許的值 | 必要 |
---|---|---|---|---|
type | 觸發程式的型別。 此類型是固定值 「TumblingWindowTrigger」。 | String | “TumblingWindowTrigger” | Yes |
runtimeState | 觸發程式運行時間的目前狀態。 注意:此專案為 <readOnly>。 |
String | “Started”、“Stopped”、“Disabled” | Yes |
頻率 | 字串,表示觸發程式遞歸的頻率單位(分鐘、小時或月)。 如果 startTime 日期值比頻率值更細微,則會在計算視窗界限時考慮 startTime 日期。 例如,如果 頻率 值為每小時,而 startTime 值為 2017-09-01T10:10:10Z,則第一個視窗為 (2017-09-01T10:10:10:10Z,2017-09-01T11:10:10Z)。 | String | “Minute”、“Hour”、“Month” | Yes |
區間 | 正整數,表示頻率值的間隔,決定觸發程式執行的頻率。 例如,如果 間隔 為 3 且 頻率 為 “hour”,則觸發程式會每隔 3 小時遞歸一次。 注意:最小視窗間隔為 5 分鐘。 |
整數 | 正整數。 | Yes |
startTime | 第一次出現,可能是過去。 第一個觸發間隔是 (startTime, startTime + interval)。 | Datetime | DateTime 值。 | Yes |
endTime | 最後一個專案,可以是過去。 | Datetime | DateTime 值。 | Yes |
延遲 | 延遲視窗數據處理開始的時間量。 管線執行會在預期的運行時間加上延遲量之後啟動。 延遲會定義觸發程式在觸發新執行之前,等候超過到期時間的時間。 延遲不會改變視窗 startTime。 例如, 延遲 值為 00:10:00 表示延遲 10 分鐘。 | Timespan (hh:mm:ss) |
時間範圍值,預設值為00:00:00。 | No |
maxConcurrency | 針對已就緒之視窗引發的同時觸發程式執行數目。 例如,若要回復昨天的每小時執行,則會產生 24 個視窗。 如果 maxConcurrency = 10,則只會針對前 10 個窗口引發觸發程式事件(00:00-01:00 - 09:00-10:00)。 完成前 10 個觸發的管線執行之後,會針對接下來的 10 個視窗引發觸發程式執行(10:00-11:00 - 19:00-20:00)。 繼續執行 maxConcurrency = 10 的範例,如果有 10 個視窗就緒,則管線執行總數為 10 個。 如果只有 1 個視窗就緒,則只有 1 個管線執行。 | 整數 | 介於 1 到 50 之間的整數。 | Yes |
retryPolicy:Count | 管線執行之前重試次數標示為「失敗」。 | 整數 | 整數,預設值為0(沒有重試)。 | No |
retryPolicy:intervalInSeconds | 重試嘗試之間的延遲,以秒為單位。 | 整數 | 預設值為30的秒數。 最小值為 30。 | No |
dependsOn:type | TumblingWindowTriggerReference 的類型。 如果設定相依性,則為必要項。 | String | “TumblingWindowTriggerDependencyReference”、“SelfDependencyTumblingWindowTriggerReference” | No |
dependsOn:size | 相依性輪轉視窗的大小。 | Timespan (hh:mm:ss) |
正時間範圍值,預設值為子觸發程式的視窗大小 | No |
dependsOn:offset | 相依性觸發程式的位移。 | Timespan (hh:mm:ss) |
在自我相依性中必須是負數的 timespan 值。 如果未指定任何值,則視窗與觸發程式本身相同。 | 自我相依性:是 其他:否 |
注意
發佈輪轉視窗觸發程式之後, 無法編輯間隔 和 頻率 。
WindowStart 和 WindowEnd 系統變數
您可以在管線定義中使用輪轉視窗觸發程式的 WindowStart 和 WindowEnd 系統變數(也就是查詢的一部分)。 將系統變數當做參數傳遞至觸發程式定義中的管線。 下列範例示範如何將這些變數當作參數傳遞:
{
"name": "MyTriggerName",
"properties": {
"type": "TumblingWindowTrigger",
...
"pipeline": {
"pipelineReference": {
"type": "PipelineReference",
"referenceName": "MyPipelineName"
},
"parameters": {
"MyWindowStart": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
},
"MyWindowEnd": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
}
}
}
}
}
若要在 管線定義中使用 WindowStart 和 WindowEnd 系統變數值,請據以使用您的 “MyWindowStart” 和 “MyWindowEnd” 參數。
回填案例中的視窗執行順序
如果觸發程式的 startTime 過去,則根據此公式 M=(CurrentTime- TriggerStartTime)/TumblingWindowSize,觸發程式會以平行方式產生 {M} backfill(past) 執行,並接受觸發程式並行執行,再執行未來的執行。 窗口的執行順序具決定性,從最舊到最新的間隔。 目前無法修改此行為。
注意
請注意,在此案例中,所有從選取的 startTime 執行都會在執行未來的執行之前執行。 如果您需要回填很長一段時間,建議執行一段歷程記錄負載。
現有的 TriggerResource 元素
下列幾點適用於更新現有的 TriggerResource 元素:
- 觸發程式建立后,無法變更觸發程式之 frequency 元素(或視窗大小)的值,以及間隔專案。 這是觸發程式執行重新執行和相依性評估正常運作的必要專案
- 如果觸發程式之 endTime 元素的值變更(已新增或更新),則尚未重設已處理的窗口狀態。 觸發程式會接受新的 endTime 值。 如果新的 endTime 值是在已經執行的視窗之前,觸發程式就會停止。 否則,觸發程式會在遇到新的 endTime 值時停止。
使用者指派的管線重試
如果管線失敗,輪轉視窗觸發程式可以使用相同的輸入參數,自動重試參考管線的執行,而不需要使用者介入。 這可以使用觸發程式定義中的屬性 「retryPolicy」 來指定。
輪轉視窗觸發相依性
如果您想要確定只有在數據處理站中成功執行另一個輪轉視窗觸發程式之後,才會執行輪轉視窗觸發程式, 請建立輪轉視窗觸發程式相依性。
取消輪轉窗口執行
如果特定視窗處於等候中、等候相依性或執行中狀態,您可以取消輪轉視窗觸發程序的執行
- 如果視窗處於 [執行中] 狀態,請取消相關聯的管線執行,且觸發程式執行之後會標示為 [取消]
- 如果視窗處於 等候 或 等候相依性 狀態,您可以從 [監視] 取消視窗:
您也可以重新執行已取消的視窗。 重新執行會採用觸發程式的最新已發佈定義,並在重新執行時重新評估指定視窗的相依性
Azure PowerShell 和 Azure CLI 的範例
本節說明如何使用 Azure PowerShell 來建立、啟動及監視觸發程式。
注意
建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az。
必要條件
Azure 訂用帳戶。 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
Azure PowerShell。 遵循使用PowerShellGet在 Windows 上安裝 Azure PowerShell 中的指示。
Azure Data Factory。 依照使用 PowerShell 建立 Azure Data Factory 中的指示來建立數據處理站和管線。
範例程式碼
在 C:\ADFv2QuickStartPSH\ 資料夾中建立名為 MyTrigger.json 的 JSON 檔案,其中包含下列內容:
重要
儲存 JSON 檔案之前,請將 startTime 元素的值設定為目前的 UTC 時間。 將 endTime 元素的值設定為超過目前 UTC 時間的一小時。
{ "name": "PerfTWTrigger", "properties": { "type": "TumblingWindowTrigger", "typeProperties": { "frequency": "Minute", "interval": "15", "startTime": "2017-09-08T05:30:00Z", "endTime" : "2017-09-08T06:30:00Z", "delay": "00:00:01", "retryPolicy": { "count": 2, "intervalInSeconds": 30 }, "maxConcurrency": 50 }, "pipeline": { "pipelineReference": { "type": "PipelineReference", "referenceName": "DynamicsToBlobPerfPipeline" }, "parameters": { "windowStart": "@trigger().outputs.windowStartTime", "windowEnd": "@trigger().outputs.windowEndTime" } }, "runtimeState": "Started" } }
使用 Set-AzDataFactoryV2Trigger Cmdlet 建立觸發程式:
Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
使用 Get-AzDataFactoryV2Trigger Cmdlet 確認觸發程式的狀態為已停止:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
使用 Start-AzDataFactoryV2Trigger Cmdlet 啟動觸發程式:
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
確認觸發程式的狀態是使用 Get-AzDataFactoryV2Trigger Cmdlet 啟動:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
使用 Get-AzDataFactoryV2TriggerRun Cmdlet,在 Azure PowerShell 中取得觸發程式執行。 若要取得觸發程式執行的相關信息,請定期執行下列命令。 更新 TriggerRunStartedAfter 和 TriggerRunStartedBefore 值,以符合觸發程式定義中的值:
Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -TriggerName "MyTrigger" -TriggerRunStartedAfter "2017-12-08T00:00:00" -TriggerRunStartedBefore "2017-12-08T01:00:00"
若要監視 Azure 入口網站 中的觸發程式執行和管線執行,請參閱監視管線執行。
相關內容
- 如需觸發程式的詳細資訊,請參閱 管線執行和觸發程式。
- 建立輪轉視窗觸發相依性。
- 瞭解如何參考管線中的觸發程式元數據,請參閱 管線執行中的參考觸發程式元數據