背景:ソースから宛先にデータをコピーするために実行されるパイプラインをスケジュールしました。これは、毎日特定の時間に実行されるようにスケジュールされています。
問題:パイプラインへの入力データセットは外部であり、特定の時間間隔では使用できません。つまり、コピーアクティビティは、パイプラインに記載されているスケジュールされた開始時刻まで待機してキックオフする必要があります。データの量を考えると、ここで時間を無駄にしたくありません。
要件:いつでも、入力データセットが利用可能になる時間にアクセスできます。これを手にして、特定の時間にのみ開始するようにスケジュールされているにもかかわらず、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
});
}
ジョブを1回だけトリガーする場合は、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;
ADFをトリガーするには、入力データセットを「準備完了」状態にする必要があります。準備完了状態の場合は、手動で[監視]タブに移動して手動で[再実行]できます。入力データセットの準備ができていない場合は、そのデータセットを手動でADFを開始できるようにする必要があります。
これはMicrosoftDocからのいくつかの例です...( 参照用のリンク )
(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ファイルを含むコードをdirに保存し、次のコマンドを使用してデプロイします。
Set-AzureRmDataFactoryV2Trigger -ResourceGroupName resourceGroupName -DataFactoryName dataFactoryName -Name "ScheduleTriggerName" -DefinitionFile ".\ScheduleTriggerName.json"
これを確認してください: https://docs.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