Arrière-plan: J'ai planifié des pipelines pour copier des données de la source à la destination. Ceci est programmé pour s'exécuter quotidiennement à une heure spécifique.
Problème: Le jeu de données en entrée du pipeline est externe et indisponible à des intervalles de temps spécifiques. Cela signifie que l'activité de copie devra attendre jusqu'à l'heure de début planifiée mentionnée dans le pipeline pour démarrer. Vu le volume de données, je ne veux pas perdre mon temps ici.
Condition: À tout moment, j'ai accès à l'heure à laquelle mon jeu de données d'entrée est disponible. Avec cela en main, je veux savoir comment déclencher un pipeline ADF à partir de C # bien que son démarrage prévu ne commence qu'à une heure spécifique.
J'ai rencontré ce même problème, je devais exécuter mon pipeline uniquement lorsqu'un travail local était terminé. Pour ce faire, j'ai modifié le travail local afin de lancer le pipeline en dernier lieu. J'ai un article ici sur la façon de démarrer un pipeline ADF avec C #. Ici est le lien vers la référence développeur ADF qui pourrait également être utile. J'ai également un exemple ici sur le déclenchement des pipelines ADF à partir de Azure Functions, si cela vous intéresse. Cela utilise le même code que dans le premier exemple, mais je profite de l’exécution de tout le processus dans le nuage et de la possibilité d’utiliser le planificateur de fonctions Azure.
Voici la méthode appropriée pour modifier le pipeline. Vous devez modifier les dates de début et de fin en fonction du moment où vous souhaitez que la tranche s'exécute.
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
});
}
Si vous souhaitez déclencher le travail une seule fois, vous pouvez définir StartDate et EndDate sur le même temps:
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;
Pour déclencher le chargeur ADF, vous devez disposer d'un jeu de données en état Prêt. S'il est prêt, vous pouvez manuellement accéder à l'onglet Surveillance pour «Re-exécuter» manuellement. Si le jeu de données en entrée n'est pas prêt, vous devez le préparer pour pouvoir démarrer manuellement le chargeur automatique de documents.
Voici quelques exemples tirés de Microsoft Doc ... ( lien pour référence )
(S'applique uniquement à la 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": {}
}
]
}
}
Enregistrez le code avec le fichier .JSON dans votre répertoire et déployez-le à l'aide de la commande suivante ...
Set-AzureRmDataFactoryV2Trigger -ResourceGroupName resourceGroupName -DataFactoryName dataFactoryName -Name "ScheduleTriggerName" -DefinitionFile ".\ScheduleTriggerName.json"
Découvrez ceci: https://docs.Microsoft.com/en-us/Azure/data-factory/concepts-pipeline-execution-triggers .
À ce jour, je pense que vous pouvez utiliser ceci:
POST
https://management.Azure.com/subscriptions/mySubId/resourceGroups/myResourceGroup/providers/Microsoft.DataFactory/factories/myDataFactory/pipelines/copyPipeline/createRun?api-version=2017-03-01-preview