建立依排程執行管線的觸發程序
適用於:Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用!
本文提供有關排程觸發程序的資訊,以及建立、啟動和監視排程觸發程序的步驟。 如需了解其他類型的觸發程序,請參閱管線執行和觸發程序。
建立排程觸發程序時,您需為觸發程序指定排程,例如開始日期、週期、結束日期等,然後與管線建立關聯。 管道和觸發程序具有多對多關聯性。 多個觸發程序可以啟動單一管道。 單一觸發程序可以啟動多個管道。
下列各節提供以各種不同方式建立排程觸發程序的步驟。
Azure Data Factory 和 Azure Synapse 入口網站體驗
您可以建立排程觸發程序,將管線排定為定期執行,例如每小時、每天。
注意
如需有關建立管線和排程觸發程序的完整逐步解說,其中將觸發程序與管線建立關聯,並執行和監視管線,請參閱快速入門:使用 Data Factory UI 來建立資料處理站。
切換至 Data Factory 中的 [編輯] 索引標籤,或 Azure Synapse Analytics 中的 [整合] 索引標籤。
選取功能表上的 [觸發程序],然後選取 [新增/編輯]。
在 [新增觸發程序] 頁面上,選取 [選擇觸發程序],然後選取 [新增]。
在 [新的觸發程序] 頁面上:
確認已針對 [類型] 選取 [排程]。
在 [開始日期] 中,指定觸發程序的開始日期時間。 預設為目前的日期時間,以國際標準時間 (UTC) 表示。
指定建立觸發程序的時區。 時區設定套用至 [進階週期選項] 中的 [開始日期]、[結束日期] 和 [排程執行時間]。 變更時區設定不會自動變更開始日期。 請確定開始日期在指定的時區中正確。 觸發程序的排程運行時間會被視為在開始日期後。 (確定開始日期至少比運行時間少 1 分鐘,否則會在下一次週期中觸發管線。)
注意
在遵守日光節約的時區,如果週期設定為日或更長,則會考量一年兩次的變更,自動調整觸發時間。 若不採用日光節約變更,選取未遵守日光節約的時區,例如 UTC。
日光節約調整僅適用於週期設定為日或更長的觸發程序。 如果觸發程序設定為小時或分鐘頻率,則會繼續定期引發。
指定觸發程序的 [週期]。 請從下拉式清單 (每分鐘、每小時、每天、每週或每月) 中選取其中一個值。 在文字方塊中輸入乘數。 例如,如果您想要讓觸發程序每隔 15 分鐘執行一次,您可以選取 [每分鐘],然後在文字方塊中輸入 15。
在 [週期] 中,如果您從下拉式清單中選擇日、週或月,您可以找到 [進階週期選項]。
若要指定結束日期時間,請選取 [指定結束日期]。 指定結束資訊,然後選取 [確定] 。
每次執行管線都會產生關聯成本。 如果您是在進行測試,您或許會想要確保只觸發管線幾次。 不過,請確定發佈時間與結束時間之間有足夠的時間可供管線執行。 只有在發佈解決方案之後,觸發程序才會生效,而不是在 UI 中儲存觸發程序時。
在 [新增觸發程序] 視窗中,在 [進階] 選項中選取 [是],並選取 [確定]。 您可以稍後使用此核取方塊來停用觸發程序。
在 [新增觸發程序] 視窗中,檢閱警告訊息,並選取 [確定]。
按一下 [全部發佈] 以發佈變更。 直到發佈變更,觸發程序才會開始觸發管線執行。
切換至左側的 [管線執行] 索引標籤,並選取 [重新整理] 以重新整理清單。 您會看到所排定之觸發程序所觸發的管線回合。 請留意 [觸發方式] 資料行中的值。 如果您使用 [立即觸發] 選項,就會在清單中看到手動觸發程序回合。
切換至 [觸發程序執行]>[排程] 檢視。
Azure PowerShell
注意
建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 若要開始使用,請參閱安裝 Azure PowerShell (部分機器翻譯)。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az。
本節說明如何使用 Azure PowerShell 來建立、啟動及監視排程觸發程序。 若要查看此範例如何運作,請先完成快速入門:使用 Azure PowerShell 來建立資料處理站。 然後,將下列程式碼新增至 main 方法中,以建立並啟動一個每隔 15 分鐘執行一次的排程觸發程序。 此觸發程序會與您在快速入門中所建立之名為 Adfv2QuickStartPipeline
的管線關聯。
必要條件
- Azure 訂用帳戶。 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
- Azure PowerShell。 請依照使用 PowerShellGet 在 Windows 上安裝 Azure PowerShell 中的指示操作。
範例指令碼
在 *C:\ADFv2QuickStartPSH* 資料夾中,使用下列內容建立名為 MyTrigger.json 的 JSON 檔案:
重要
在您儲存 JSON 檔案之前,請先將
startTime
元素的值設定為目前的 UTC 時間。 將endTime
元素的值設定為目前 UTC 時間的一小時之後。{ "properties": { "name": "MyTrigger", "type": "ScheduleTrigger", "typeProperties": { "recurrence": { "frequency": "Minute", "interval": 15, "startTime": "2017-12-08T00:00:00Z", "endTime": "2017-12-08T01:00:00Z", "timeZone": "UTC" } }, "pipelines": [{ "pipelineReference": { "type": "PipelineReference", "referenceName": "Adfv2QuickStartPipeline" }, "parameters": { "inputPath": "adftutorial/input", "outputPath": "adftutorial/output" } } ] } }
在 JSON 程式碼片段中:
觸發程序的
type
元素會設定為ScheduleTrigger
。frequency
元素會設定為Minute
,而interval
元素會設定為15
。 因此,觸發程序在開始與結束時間之間,每 15 分鐘執行一次管線。timeZone
元素指定建立觸發程序的時區。 這個設定會影響startTime
與endTime
。endTime
元素是在startTime
元素值的一小時之後。 因此,觸發程序在開始時間之後的 15 分鐘、30 分鐘及 45 分鐘執行管線。 請別忘記將開始時間更新為目前的 UTC 時間,並將結束時間更新為開始時間的一小時之後。重要
針對UTC時區,
startTime
和endTime
必須遵循yyyy-MM-ddTHH:mm:ss
Z 格式。對於其他時區,startTime
和endTime
遵循yyyy-MM-ddTHH:mm:ss
格式。根據 ISO 8601 標準,時間戳記的
Z
尾碼將日期時間標示為 UTC 時區,使timeZone
欄位變得無用。 UTC 時區遺漏Z
尾碼時,將導致觸發程序啟用時發生錯誤。觸發程序與
Adfv2QuickStartPipeline
管線相關聯。 若要將多個管線與觸發程序建立關聯,請新增更多個pipelineReference
區段。快速入門中的管線會採用兩個
parameters
值:inputPath
和outputPath
。 您從觸發程序傳遞這些參數的值。
使用 Set-AzDataFactoryV2Trigger Cmdlet 建立觸發程序:
Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
使用 Get-AzDataFactoryV2Trigger Cmdlet,確認觸發程序的狀態為 Stopped:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
使用 Start-AzDataFactoryV2Trigger Cmdlet 啟動觸發程序:
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
使用 Get-AzDataFactoryV2Trigger Cmdlet,確認觸發程序的狀態為 Started:
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"
注意
排程觸發程序的觸發時間以 UTC 時間戳記指定。
TriggerRunStartedAfter
和TriggerRunStartedBefore
也預期 UTC時間戳記。若要在 Azure 入口網站中監視觸發程序回合和管線回合,請參閱監視管線回合。
Azure CLI
本節說明如何使用 Azure CLI 來建立、啟動及監視排程觸發程序。 若想看到此範例實際運作,請先完成快速入門:透過使用 Azure CLI 來建立 Azure Data Factory。 然後,遵循步驟來建立並啟動排程觸發程序,每 15 分鐘執行一次。 此觸發程序會與您在快速入門中所建立之名為 Adfv2QuickStartPipeline
的管線關聯。
必要條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
範例指令碼
在工作目錄中,使用觸發程式的屬性建立名為 MyTrigger.json 的 JSON 檔案。 針對此範例,請使用下列內容:
重要
在您儲存 JSON 檔案之前,請先將
startTime
元素的值設定為目前的 UTC 時間。 將endTime
元素的值設定為目前 UTC 時間的一小時之後。{ "name": "MyTrigger", "type": "ScheduleTrigger", "typeProperties": { "recurrence": { "frequency": "Minute", "interval": 15, "startTime": "2017-12-08T00:00:00Z", "endTime": "2017-12-08T01:00:00Z", "timeZone": "UTC" } }, "pipelines": [{ "pipelineReference": { "type": "PipelineReference", "referenceName": "Adfv2QuickStartPipeline" }, "parameters": { "inputPath": "adftutorial/input", "outputPath": "adftutorial/output" } } ] }
在 JSON 程式碼片段中:
觸發程序的
type
元素會設定為ScheduleTrigger
。frequency
元素會設定為Minute
,而interval
元素會設定為15
。 因此,觸發程序在開始與結束時間之間,每 15 分鐘執行一次管線。timeZone
元素指定建立觸發程序的時區。 這個設定會影響startTime
與endTime
。endTime
元素是在startTime
元素值的一小時之後。 因此,觸發程序在開始時間之後的 15 分鐘、30 分鐘及 45 分鐘執行管線。 請別忘記將開始時間更新為目前的 UTC 時間,並將結束時間更新為開始時間的一小時之後。重要
針對UTC時區,
startTime
和 endTime 必須遵循yyyy-MM-ddTHH:mm:ss
Z 格式。對於其他時區,startTime
和endTime
遵循yyyy-MM-ddTHH:mm:ss
格式。根據 ISO 8601 標準,時間戳記的 Z 尾碼將日期時間標示為 UTC 時區,使
timeZone
欄位變得無用。 如果 UTC 時區遺漏 Z 後綴,則觸發程序啟用時,結果是錯誤。觸發程序與
Adfv2QuickStartPipeline
管線相關聯。 若要將多個管線與觸發程序建立關聯,請新增更多個pipelineReference
區段。快速入門中的管線會採用兩個
parameters
值:inputPath
和outputPath
。 您從觸發程序傳遞這些參數的值。
使用 az datafactory trigger create 命令建立觸發程序:
az datafactory trigger create --resource-group "ADFQuickStartRG" --factory-name "ADFTutorialFactory" --name "MyTrigger" --properties @MyTrigger.json
使用 az datafactory trigger show 命令,確認觸發程序的狀態為 Stopped:
az datafactory trigger show --resource-group "ADFQuickStartRG" --factory-name "ADFTutorialFactory" --name "MyTrigger"
使用 az datafactory trigger start 命令啟動觸發程序:
az datafactory trigger start --resource-group "ADFQuickStartRG" --factory-name "ADFTutorialFactory" --name "MyTrigger"
使用 az datafactory trigger show 命令,確認觸發程序的狀態為 Started:
az datafactory trigger show --resource-group "ADFQuickStartRG" --factory-name "ADFTutorialFactory" --name "MyTrigger"
使用 az datafactory trigger-run query-by-factory 命令,取得 Azure CLI 中的觸發程序執行。 若要取得有關觸發程序執行的資訊,請定期執行以下命令。 更新
last-updated-after
和last-updated-before
值,以符合觸發程序定義中的值:az datafactory trigger-run query-by-factory --resource-group "ADFQuickStartRG" --factory-name "ADFTutorialFactory" --filters operand="TriggerName" operator="Equals" values="MyTrigger" --last-updated-after "2017-12-08T00:00:00" --last-updated-before "2017-12-08T01:00:00"
注意
排程觸發程序的觸發時間以 UTC 時間戳記指定。 last-updated-after 和 last-updated-before 也需要 UTC 時間戳記。
若要在 Azure 入口網站中監視觸發程序回合和管線回合,請參閱監視管線回合。
.NET SDK
本節說明如何使用 .NET SDK 來建立、啟動及監視觸發程序。 若要查看此範例如何運作,請先完成快速入門:使用 .NET SDK 來建立資料處理站。 然後,將下列程式碼新增至 main 方法中,以建立並啟動一個每隔 15 分鐘執行一次的排程觸發程序。 此觸發程序會與您在快速入門中所建立之名為 Adfv2QuickStartPipeline
的管線關聯。
若要建立並啟動一個每隔 15 分鐘執行一次的排程觸發程序,請將下列程式碼新增至 main 方法中:
// Create the trigger
Console.WriteLine("Creating the trigger");
// Set the start time to the current UTC time
DateTime startTime = DateTime.UtcNow;
// Specify values for the inputPath and outputPath parameters
Dictionary<string, object> pipelineParameters = new Dictionary<string, object>();
pipelineParameters.Add("inputPath", "adftutorial/input");
pipelineParameters.Add("outputPath", "adftutorial/output");
// Create a schedule trigger
string triggerName = "MyTrigger";
ScheduleTrigger myTrigger = new ScheduleTrigger()
{
Pipelines = new List<TriggerPipelineReference>()
{
// Associate the Adfv2QuickStartPipeline pipeline with the trigger
new TriggerPipelineReference()
{
PipelineReference = new PipelineReference(pipelineName),
Parameters = pipelineParameters,
}
},
Recurrence = new ScheduleTriggerRecurrence()
{
// Set the start time to the current UTC time and the end time to one hour after the start time
StartTime = startTime,
TimeZone = "UTC",
EndTime = startTime.AddHours(1),
Frequency = RecurrenceFrequency.Minute,
Interval = 15,
}
};
// Now, create the trigger by invoking the CreateOrUpdate method
TriggerResource triggerResource = new TriggerResource()
{
Properties = myTrigger
};
client.Triggers.CreateOrUpdate(resourceGroup, dataFactoryName, triggerName, triggerResource);
// Start the trigger
Console.WriteLine("Starting the trigger");
client.Triggers.Start(resourceGroup, dataFactoryName, triggerName);
若要在 UTC 以外的時區建立觸發程序,需要下列設定:
<<ClientInstance>>.SerializationSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat;
<<ClientInstance>>.SerializationSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Unspecified;
<<ClientInstance>>.SerializationSettings.DateParseHandling = DateParseHandling.None;
<<ClientInstance>>.DeserializationSettings.DateParseHandling = DateParseHandling.None;
<<ClientInstance>>.DeserializationSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat;
<<ClientInstance>>.DeserializationSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Unspecified;
若要監視觸發程序回合,請將下列程式碼新增至範例中的最後一個 Console.WriteLine
陳述式之前:
// Check that the trigger runs every 15 minutes
Console.WriteLine("Trigger runs. You see the output every 15 minutes");
for (int i = 0; i < 3; i++)
{
System.Threading.Thread.Sleep(TimeSpan.FromMinutes(15));
List<TriggerRun> triggerRuns = client.Triggers.ListRuns(resourceGroup, dataFactoryName, triggerName, DateTime.UtcNow.AddMinutes(-15 * (i + 1)), DateTime.UtcNow.AddMinutes(2)).ToList();
Console.WriteLine("{0} trigger runs found", triggerRuns.Count);
foreach (TriggerRun run in triggerRuns)
{
foreach (KeyValuePair<string, string> triggeredPipeline in run.TriggeredPipelines)
{
PipelineRun triggeredPipelineRun = client.PipelineRuns.Get(resourceGroup, dataFactoryName, triggeredPipeline.Value);
Console.WriteLine("Pipeline run ID: {0}, Status: {1}", triggeredPipelineRun.RunId, triggeredPipelineRun.Status);
List<ActivityRun> runs = client.ActivityRuns.ListByPipelineRun(resourceGroup, dataFactoryName, triggeredPipelineRun.RunId, run.TriggerRunTimestamp.Value, run.TriggerRunTimestamp.Value.AddMinutes(20)).ToList();
}
}
}
若要在 Azure 入口網站中監視觸發程序回合和管線回合,請參閱監視管線回合。
Python SDK
本節說明如何使用 Python SDK 來建立、啟動及監視觸發程序。 若要查看此範例運作,請先完成 快速入門:使用 Python SDK 建立資料處理站。 然後,將下列程式碼新增至 Python 指令碼中的 monitor the pipeline run
程式碼區塊之後。 此程式碼會建立一個在指定的開始和結束時間之間,每隔 15 分鐘執行一次的排程觸發程序。 請將 start_time
變數更新為目前的 UTC 時間,並將 end_time
變數更新為目前 UTC 時間的一小時之後。
# Create a trigger
tr_name = 'mytrigger'
scheduler_recurrence = ScheduleTriggerRecurrence(frequency='Minute', interval='15',start_time='2017-12-12T04:00:00Z', end_time='2017-12-12T05:00:00Z', time_zone='UTC')
pipeline_parameters = {'inputPath':'adftutorial/input', 'outputPath':'adftutorial/output'}
pipelines_to_run = []
pipeline_reference = PipelineReference('copyPipeline')
pipelines_to_run.append(TriggerPipelineReference(pipeline_reference, pipeline_parameters))
tr_properties = TriggerResource(properties=ScheduleTrigger(description='My scheduler trigger', pipelines = pipelines_to_run, recurrence=scheduler_recurrence))
adf_client.triggers.create_or_update(rg_name, df_name, tr_name, tr_properties)
# Start the trigger
adf_client.triggers.start(rg_name, df_name, tr_name)
若要在 Azure 入口網站中監視觸發程序回合和管線回合,請參閱監視管線回合。
Azure Resource Manager 範本
您可以使用 Azure Resource Manager 範本來建立觸發程序。 如需逐步指示,請參閱使用 Azure Resource Manager 範本建立 Azure Data Factory。
將觸發程序開始時間傳遞給管線
第 1 版 Azure Data Factory 支援使用下列系統變數 SliceStart
、SliceEnd
、WindowStart
和 WindowEnd
來讀取或寫入分割的資料。 在目前版本的 Data Factory 和 Azure Synapse 管線中,您可以使用管線參數來實現此行為。 觸發程序的開始時間和排程時間會設定為管線參數的值。 在以下範例中,會將觸發程序的排程時間傳遞給管線的 scheduledRunTime
參數來作為值:
"parameters": {
"scheduledRunTime": "@trigger().scheduledTime"
}
JSON 結構描述
下列 JSON 定義將說明如何使用排程和週期來建立排程觸發程序:
{
"properties": {
"type": "ScheduleTrigger",
"typeProperties": {
"recurrence": {
"frequency": <<Minute, Hour, Day, Week, Month>>,
"interval": <<int>>, // Optional, specifies how often to fire (default to 1)
"startTime": <<datetime>>,
"endTime": <<datetime - optional>>,
"timeZone": "UTC"
"schedule": { // Optional (advanced scheduling specifics)
"hours": [<<0-23>>],
"weekDays": [<<Monday-Sunday>>],
"minutes": [<<0-59>>],
"monthDays": [<<1-31>>],
"monthlyOccurrences": [
{
"day": <<Monday-Sunday>>,
"occurrence": <<1-5>>
}
]
}
}
},
"pipelines": [
{
"pipelineReference": {
"type": "PipelineReference",
"referenceName": "<Name of your pipeline>"
},
"parameters": {
"<parameter 1 Name>": {
"type": "Expression",
"value": "<parameter 1 Value>"
},
"<parameter 2 Name>" : "<parameter 2 Value>"
}
}
]
}
}
重要
parameters
屬性是 pipelines
元素的必要屬性。 如果您的管線未採用任何參數,您就必須為 parameters
屬性加入一個空的 JSON 定義。
結構描述概觀
下表提供與觸發程序之週期和排程相關的主要結構描述元素概觀。
JSON 屬性 | 描述 |
---|---|
startTime |
日期時間值。 在簡易排程中,startTime 屬性的值會套用至第一個發生項目。 在複雜的排程中,觸發程序會在到了指定的 startTime 值才啟動。 針對 UTC 時區,格式為 'yyyy-MM-ddTHH:mm:ssZ' 。 針對其他時區,格式為 yyyy-MM-ddTHH:mm:ss 。 |
endTime |
觸發程序的結束日期和時間。 觸發程序在指定的結束日期和時間之後便不再執行。 此屬性的值不可以是過去的時間。 這個屬性為選擇性。 針對 UTC 時區,格式為 'yyyy-MM-ddTHH:mm:ssZ' 。 針對其他時區,格式為 yyyy-MM-ddTHH:mm:ss 。 |
timeZone |
建立觸發程序的時區。 這個設定會影響 startTime 、endTime 和 schedule 。 請參閱支援的時區清單。 |
recurrence |
指定觸發程序之週期規則的 recurrence 物件。 迴圈物件支援 frequency 、interval 、endTime 、count 和 schedule 元素。 定義 recurrence 物件時,必須一併定義 frequency 元素。 其他 recurrence 物件元素則為選用元素。 |
frequency |
觸發程序重複執行時的頻率單位。 支援的值包括:minute, 、hour, 、day 、week 和 month 。 |
interval |
代表 frequency 值之間隔的整數值,用來決定觸發程序執行的頻率。 例如,如果 interval 是 3 ,且 frequency 是 week ,則觸發程序會每隔 3 周遞歸一次。 |
schedule |
觸發程序的週期排程。 具有指定之 frequency 值的觸發程序會根據週期排程來改變其週期。 schedule 屬性會根據分鐘、小時、星期幾、月日及週數來修改週期。 |
重要
針對UTC時區,startTime
和 endTime
必須遵循 yyyy-MM-ddTHH:mm:ss
Z 格式。對於其他時區,startTime
和 endTime
遵循 yyyy-MM-ddTHH:mm:ss
格式。
根據 ISO 8601 標準,時間戳記的 Z 尾碼將日期時間標示為 UTC 時區,使 timeZone
欄位變得無用。 如果 UTC 時區遺漏 Z 後綴,則觸發程序啟用時,結果是錯誤。
結構描述預設值、限制及範例
JSON 屬性 | 類型 | 必要 | 預設值 | 有效值 | 範例 |
---|---|---|---|---|---|
startTime |
String | Yes | 無 | ISO 8601 日期時間 | 針對 UTC 時區:"startTime" : "2013-01-09T09:30:00-08:00Z" 針對其他時區: "2013-01-09T09:30:00-08:00" |
timeZone |
String | Yes | 無 | 時區值 | "UTC" |
recurrence |
Object | Yes | 無 | Recurrence 物件 | "recurrence" : { "frequency" : "monthly", "interval" : 1 } |
interval |
數字 | No | 1 | 1 到 1,000 | "interval":10 |
endTime |
String | Yes | 無 | 代表未來時間的日期時間值 | 針對 UTC 時區:"endTime" : "2013-02-09T09:30:00-08:00Z" 針對其他時區: "endTime" : "2013-02-09T09:30:00-08:00" |
schedule |
Object | No | 無 | Schedule 物件 | "schedule" : { "minute" : [30], "hour" : [8,17] } |
時區選項
以下是排程觸發程序支援的一些時區。
Time zone | UTC 時差 (非日光節約) | timeZone 值 | 遵守日光節約 | 時間戳記格式 |
---|---|---|---|---|
國際標準時間 | 0 | UTC |
No | 'yyyy-MM-ddTHH:mm:ssZ' |
太平洋時間 (PT) | -8 | Pacific Standard Time |
Yes | 'yyyy-MM-ddTHH:mm:ss' |
中部時間 (CT) | -6 | Central Standard Time |
Yes | 'yyyy-MM-ddTHH:mm:ss' |
東部時間 (ET) | 5- | Eastern Standard Time |
Yes | 'yyyy-MM-ddTHH:mm:ss' |
格林威治標準時間 (GMT) | 0 | GMT Standard Time |
Yes | 'yyyy-MM-ddTHH:mm:ss' |
歐洲中部標準時間 | 1+ | W. Europe Standard Time |
Yes | 'yyyy-MM-ddTHH:mm:ss' |
印度標準時間 (IST) | +5:30 | India Standard Time |
No | 'yyyy-MM-ddTHH:mm:ss' |
中國標準時間 | +8 | China Standard Time |
No | 'yyyy-MM-ddTHH:mm:ss' |
這不是完整清單。 如需時區選項的完整清單,請參閱入口網站的觸發程序建立頁面。
startTime 屬性
下表說明 startTime
屬性如何控制觸發程序執行。
startTime 值 | 週期性無排程 | 週期性有排程 |
---|---|---|
開始時間已過去 | 計算開始時間之後的第一個未來執行時間,並在該時間執行。 根據從上次執行時間算出的時間來執行後續的執行作業。 請參閱本表後面的範例。 |
觸發程序會在「到了」指定的開始時間才啟動。 第一次執行是根據從開始時間算出的排程。 根據週期排程執行後續的執行作業。 |
開始時間在未來或現在 | 在指定的開始時間執行一次。 根據從上次執行時間算出的時間來執行後續的執行作業。 |
觸發程序會在「到了」指定的開始時間才啟動。 第一次執行是根據從開始時間算出的排程。 根據週期排程執行後續的執行作業。 |
我們來看看一個範例:當開始時間在過去、具有週期性但無排程時,會發生什麼情況。 假設目前時間是 2017-04-08 13:00
,開始時間是 2017-04-07 14:00
,而週期是每隔兩天。 (recurrence
值是藉由將 frequency
屬性設定為 day
,並將 interval
屬性設定為 2
來定義。)請注意,startTime
值是過去的時間,發生在目前時間之前。
根據這些條件,第一次執行在 2017-04-09
14:00
。 排程器引擎會從開始時間計算執行週期。 過去的任何執行個體都會遭到捨棄。 引擎會使用下一個在未來發生的執行個體。 在此案例中,開始時間是 2017-04-07
2:00pm
,因此下一個執行個體在該時間之後的兩天,亦即 2017-04-09
2:00pm
。
即使 startTime
值為 2017-04-05 14:00
或 2017-04-01 14:00
,第一次執行時間仍然相同。 在第一次執行之後,就會使用排程來算出後續的執行時間。 因此,後續的執行在 2017-04-11
2:00pm
、2017-04-13
2:00pm
、2017-04-15
2:00pm
,依此類推。
最後,當未在觸發程序的排程中設定小時或分鐘時,將會使用第一次執行的小時或分鐘作為預設值。
schedule 屬性
使用排程可以限制觸發程序的執行次數。 例如,如果將每月執行的觸發程序排定為只在 31 日執行,則該觸發程序將只會在有第 31 天的月份執行。
排程也可以增加觸發程序的執行次數。 例如,如果將每月執行的觸發程序排定在月份的 1 日和 2 日執行,該觸發程序就會在月份的第 1 天和第 2 天執行,而不是一個月執行一次。
指定多個 schedule
元素時,評估順序會從最大到最小排程設定。 評估會從週數開始,然後依序是月日、星期幾、小時,最後是分鐘。
下表詳細說明 schedule
元素。
JSON 元素 | 描述 | 有效值 |
---|---|---|
minutes |
一小時內觸發程序執行的分鐘數。 |
|
hours |
一天內觸發程序執行的小時數。 |
|
weekDays |
觸發程序在一週中的執行日。 此值只能與 weekly 頻率搭配指定。 |
|
monthlyOccurrences |
觸發程序在一個月中的執行日。 此值只能與 monthly 頻率搭配指定。 |
|
monthDays |
觸發程序在一個月中的執行日。 此值只能與 monthly 頻率搭配指定。 |
|
觸發程序週期排程的範例
本節提供週期排程的範例,並將焦點放在 schedule
物件及其元素。
這些範例會假設 interval
值為 1
,且 frequency
值根據排程定義是正確的。 例如,您不能有 day
的 frequency
值,而且在 schedule
物件中也有 monthDays
修改。 在上一節的表格中已提到這類限制。
範例 | 描述 |
---|---|
{"hours":[5]} |
在每天的上午 5:00 執行。 |
{"minutes":[15], "hours":[5]} |
在每天的上午 5:15 執行。 |
{"minutes":[15], "hours":[5,17]} |
在每天的上午 5:15 和下午 5:15 執行。 |
{"minutes":[15,45], "hours":[5,17]} |
在每天的上午 5:15、上午 5:45、下午 5:15 及下午 5:45 執行。 |
{"minutes":[0,15,30,45]} |
每隔 15 分鐘執行一次。 |
{hours":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]} |
每小時執行一次。 此觸發程序每小時執行一次。 已指定值時,分鐘會受 startTime 值控制。 如果未指定值,分鐘就會受建立時間控制。 例如,如果開始時間或建立時間 (無論套用哪一個) 為下午 12:25,觸發程序就會在 00:25、01:25、02:25、… 及 23:25 執行。此排程相當於 hour 的 frequency 值觸發程序、1 的 interval 值,且沒有 schedule 。 此排程可以與不同的 frequency 和 interval 值搭配使用,以建立其他觸發程序。 例如,當 frequency 值為 month 時,排程一個月只會執行一次,而不是像 frequency 值為 day 時會每天執行。 |
{"minutes":[0]} |
在每小時整點執行。 此觸發程序會在每小時整點執行,從上午 12:00 開始,接著在上午 1:00、上午 2:00,依此類推。 此排程相當於 hour 的 frequency 值的觸發程序,以及零分鐘 startTime 值,或沒有 schedule ,但 day 的 frequency 值。 如果 frequency 值為 week 或 month ,排程將只會分別在每週的一天或每個月的一天執行。 |
{"minutes":[15]} |
在每小時的 15 分執行。 此觸發程序會在每小時的 15 分執行,從上午 00:15 開始,接著在上午 1:15、上午 2:15,依此類推,並在下午 11:15 結束。 |
{"hours":[17], "weekDays":["saturday"]} |
在每週星期六的下午 5:00 執行。 |
{"hours":[17], "weekDays":["monday", "wednesday", "friday"]} |
在每週星期一、星期三及星期五的下午 5:00 執行。 |
{"minutes":[15,45], "hours":[17], "weekDays":["monday", "wednesday", "friday"]} |
在每週星期一、星期三及星期五的下午 5:15 和 5:45 執行。 |
{"minutes":[0,15,30,45], "weekDays":["monday", "tuesday", "wednesday", "thursday", "friday"]} |
在工作日每隔 15 分鐘執行一次。 |
{"minutes":[0,15,30,45], "hours": [9, 10, 11, 12, 13, 14, 15, 16] "weekDays":["monday", "tuesday", "wednesday", "thursday", "friday"]} |
在工作日的上午 9:00 與下午 4:45 之間每隔 15 分鐘執行一次。 |
{"weekDays":["tuesday", "thursday"]} |
在星期二和星期四的指定開始時間執行。 |
{"minutes":[0], "hours":[6], "monthDays":[28]} |
在每個月的第 28 天上午 6:00 點執行 (假設 month 的 frequency 值)。 |
{"minutes":[0], "hours":[6], "monthDays":[-1]} |
在月份最後一天的上午 6:00 執行。 若要在月份的最後一天執行觸發程序,請使用 -1,而不要使用 28、29、30 或 31。 |
{"minutes":[0], "hours":[6], "monthDays":[1,-1]} |
在每個月第一天和最後一天的上午 6:00 執行。 |
{monthDays":[1,14]} |
在每個月第一天和第十四天的指定開始時間執行。 |
{"minutes":[0], "hours":[5], "monthlyOccurrences":[{"day":"friday", "occurrence":1}]} |
在每個月第一個星期五的上午 5:00 執行。 |
{"monthlyOccurrences":[{"day":"friday", "occurrence":1}]} |
在每個月第一個星期五的指定開始時間執行。 |
{"monthlyOccurrences":[{"day":"friday", "occurrence":-3}]} |
在每個月倒數第三個星期五的指定開始時間執行。 |
{"minutes":[15], "hours":[5], "monthlyOccurrences":[{"day":"friday", "occurrence":1},{"day":"friday", "occurrence":-1}]} |
在每個月第一個和最後一個星期五的上午 5:15 執行。 |
{"monthlyOccurrences":[{"day":"friday", "occurrence":1},{"day":"friday", "occurrence":-1}]} |
在每個月第一個和最後一個星期五的指定開始時間執行。 |
{"monthlyOccurrences":[{"day":"friday", "occurrence":5}]} |
在每個月第五個星期五的指定開始時間執行。 如果月份中沒有第五個星期五,管線就不會執行,由於它已排定為只在第五個星期五執行。 若要在月份中最後一個出現的星期五執行觸發程序,請考慮使用 -1 而不是 5 來作為 occurrence 的值。 |
{"minutes":[0,15,30,45], "monthlyOccurrences":[{"day":"friday", "occurrence":-1}]} |
在月份中最後一個星期五每隔 15 分鐘執行一次。 |
{"minutes":[15,45], "hours":[5,17], "monthlyOccurrences":[{"day":"wednesday", "occurrence":3}]} |
在每個月第三個星期三的上午 5:15、上午 5:45、下午 5:15 及下午 5:45 執行。 |
相關內容
- 如需觸發程序的詳細資訊,請參閱管線執行和觸發程序。
- 若要了解如何在管線中參考觸發程序中繼資料,請參閱在管線執行中參考觸發程序中繼資料。