2016-08-18 1 views
8

Hintergrund: Ich habe geplante Pipelines ausgeführt, um Daten von der Quelle zum Ziel zu kopieren. Dies wird täglich zu einer bestimmten Zeit ausgeführt.Azure Data Factory - Wie kann ich geplante/OneTime-Pipelines auslösen?

Problem: Das Eingabe-Dataset für die Pipeline ist extern und nicht in bestimmten Zeitintervallen verfügbar. Dies bedeutet, dass die Kopieraktivität warten muss, bis die in der Pipeline angegebene Startzeit beginnt. Angesichts der Datenmenge möchte ich hier meine Zeit nicht verschwenden.

Anforderung: Ich habe jederzeit Zugriff auf den Zeitpunkt, zu dem meine Eingabedatei verfügbar ist. Damit möchte ich wissen, wie man eine ADF-Pipeline von C# aus startet, obwohl sie nur zu einem bestimmten Zeitpunkt gestartet werden soll.

Antwort

8

Ich stieß auf das gleiche Problem, ich musste meine Pipeline nur ausführen, wenn ein lokaler Job abgeschlossen wurde. Dazu habe ich den lokalen Job modifiziert, um die Pipeline als letzten Schritt zu starten. Ich habe eine schreiben here zum Starten einer ADF-Pipeline mit C#. Here ist der Link zur ADF-Entwicklerreferenz, die ebenfalls hilfreich sein kann. Ich habe auch ein Beispiel here zum Auslösen von ADF-Pipelines von Azure-Funktionen, wenn Sie interessiert sind. Dies ist der gleiche Code aus dem ersten Beispiel, aber ich habe den Vorteil, dass der gesamte Prozess in der Cloud ausgeführt wird und der azure-Funktionsplaner verwendet werden kann.

Hier ist die relevante Methode zum Ändern der Pipeline. Sie müssen das Start- und Enddatum ändern, je nachdem wann das Segment ausgeführt werden soll.

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 
     }); 
    } 
0

Um ADF auszulösen, benötigen Sie ein Eingabe-Dataset im Status 'Bereit'. Wenn es sich im Bereitschaftszustand befindet, können Sie manuell zur Registerkarte "Überwachung" wechseln, um manuell "Re-Run" auszuführen. Wenn das Eingabe-Dataset nicht bereit ist, müssen Sie dieses Dataset für den manuellen Start von ADF vorbereiten.

2

Wenn Sie nur einmal den Auftrag auslösen, dann können Sie Startdatum und Enddatum gesetzt gleichzeitig zu sein:

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; 
0

Hier ist ein Beispiel von Microsoft Doc ... (link for reference)

(gilt nur für 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": {} 
      } 
     ] 
    } 
} 

Speichern Sie den Code mit JSON-Datei in Ihrem Verzeichnis und implementieren mit folgenden Befehl ...

Set-AzureRmDataFactoryV2Trigger -ResourceGroupName resourceGroupName -DataFactoryName dataFactoryName -Name "ScheduleTriggerName" -DefinitionFile ".\ScheduleTriggerName.json" 
Verwandte Themen