Background:我已经安排了管道运行,用于将数据从源复制到目标。它被安排在每天的特定时间运行。
问题:管道的输入数据集是外部的,在特定的时间间隔内不可用。这意味着复制活动必须等到管道中提到的计划启动时间才开始。考虑到数据量,我不想在这里浪费时间。
要求:在任何给定的时间,我可以访问我的输入数据集可用的时间。有了这个,我想知道如何从c#触发ADF管道,尽管它计划只在特定时间启动。
我遇到了同样的问题,我只需要在本地作业完成时才运行管道。为此,我修改了本地作业,将管道作为最后一步启动。我在这里写了一篇关于如何用c#启动ADF管道的文章。这里是ADF开发人员参考的链接,可能也会有所帮助。如果你感兴趣的话,我还有一个关于如何从Azure Functions中触发ADF管道的例子。这是使用与第一个示例相同的代码,但我得到了在云中运行整个过程的好处,并且能够使用azure函数调度器。
下面是修改管道的相关方法。您需要根据您希望切片运行的时间来更改开始和结束日期。
public void StartPipeline(string resourceGroup, string dataFactory, string pipelineName, DateTime slice)
{
var pipeline = inner_client.Pipelines.Get(resourceGroup, dataFactory, pipelineName);
pipeline.Pipeline.Properties.Start = DateTime.Parse($"{slice.Date:yyyy-MM-dd}T00:00:00Z");
pipeline.Pipeline.Properties.End = DateTime.Parse($"{slice.Date:yyyy-MM-dd}T23:59:59Z");
pipeline.Pipeline.Properties.IsPaused = false;
inner_client.Pipelines.CreateOrUpdate(resourceGroup, dataFactory, new PipelineCreateOrUpdateParameters()
{
Pipeline = pipeline.Pipeline
});
}
要触发ADF,您需要将输入数据集置于'Ready'状态。如果它处于就绪状态,你可以手动转到监控选项卡手动'重新运行',如果输入数据集还没有准备好,那么你需要使该数据集准备好手动启动ADF。
如果您只想触发一次作业,那么您可以将StartDate和EndDate设置为相同的时间:
pipeline.Pipeline.Properties.Start = DateTime.Parse($"{someDate:yyyy-MM-dd}T00:00:00Z");
pipeline.Pipeline.Properties.End = DateTime.Parse($"{someDate:yyyy-MM-dd}T00:00:00Z");
pipeline.Pipeline.Properties.IsPaused = false;
下面是一些来自Microsoft Doc的例子…(链接参考)
(仅适用于V2)
{
"properties": {
"name": "MyTrigger",
"type": "ScheduleTrigger",
"typeProperties": {
"recurrence": {
"frequency": "Hour",
"interval": 1,
"startTime": "2017-11-01T09:00:00-08:00",
"endTime": "2017-11-02T22:00:00-08:00"
}
},
"pipelines": [{
"pipelineReference": {
"type": "PipelineReference",
"referenceName": "SQLServerToBlobPipeline"
},
"parameters": {}
},
{
"pipelineReference": {
"type": "PipelineReference",
"referenceName": "SQLServerToAzureSQLPipeline"
},
"parameters": {}
}
]
}
}
将代码与.JSON文件保存在您的目录中,并使用以下命令部署…
Set-AzureRmDataFactoryV2Trigger -ResourceGroupName resourceGroupName -DataFactoryName dataFactoryName -Name "ScheduleTriggerName" -DefinitionFile ".ScheduleTriggerName.json"
看看这个:https://learn.microsoft.com/en-us/azure/data-factory/concepts-pipeline-execution-triggers。
从今天起,我相信你可以使用这个:
POST
https://management.azure.com/subscriptions/mySubId/resourceGroups/myResourceGroup/providers/Microsoft.DataFactory/factories/myDataFactory/pipelines/copyPipeline/createRun?api-version=2017-03-01-preview