Hidden Properties in ADF v2

Azure Data Factory v2 ist die Platform as a Service Lösung von Microsoft Azure, mit der ETL Jobs in der Cloud durchgeführt und koordiniert werden können.
In ADF ist es möglich, Datensätze und Pipelines in vielerlei Hinsicht zu parametrisieren, um möglichst wiederverwendbaren Code zu erstellen. Diese Parameter können dann einerseits genutzt werden, um von außen die Ausführung der Pipelines zu steuern oder aber auch zwischen den einzelnen Objekten der Pipeline, den sog. Aktivitäten, Informationen zu übergeben. Die meisten Parameter wie z.B. die „scheduledTime“ des Pipeline Triggers werden in der ADF-Dokumentation ausführlich erläutert. Dies ist Ihre JSON-Repräsentation:

				
					"parameters": {
  "para_scheduledTime": "@trigger().scheduledTime"
}

				
			

Der Ausdruck @trigger() referenziert hierbei das Trigger-Objekt, welches zu Beginn der Ausführung der Pipeline in Form eines serialisierten JSON übergeben wird. Über den Punktoperator kann auf die Property scheduledTime dann direkt zugegriffen werden.

Leider sind nicht alle diese Properties dokumentiert. Die meisten Objekte sind deutlich komplexer und enthalten weitere undokumentierte Properties, die im täglichen Entwicklerleben sehr nützlich sein können. Doch wie soll man herausfinden, wie sie heißen, um sie referenzieren und nutzen zu können?

Die Antwort ist eigentlich recht simpel. Man übergibt beim triggern der Pipeline einfach das gesamte Objekt ohne auf eine spezifische Property zu referenzieren.Der Datentyp des Zielparameters muss dabei entweder String oder Object sein.

Zur Laufzeit kann man dann im Monitoring Tab über die Parameteransicht das gesamte JSON inspizieren. Für das Scheduled Trigger Objekt sieht das JSON folgendermaßen aus:
				
					{
  "name": "Trigger_12348CAF-BE66-42CF-83DA-E3028693F304",
  "startTime": "2021-05-25T18:00:22.4180978Z",
  "endTime": "2021-05-25T18:00:22.4180978Z",
  "scheduledTime": "2021-05-25T18:00:22.507Z",
  "trackingId": "1234a112-7bb9-4ba6-b032-6189d6dd8b73",
  "clientTrackingId": "12346637084630521889360938860CU33",
  "code": "OK",
  "status": "Succeeded"
}

				
			

In der Dokumentation finden sich hier nur die scheduledTime und die startTime, jedoch lassen sich auch alle undokumentierten Properties auf dieselbe Art und Weise abrufen: @trigger().. Die Eigenschaften lassen sich wie üblich durch die Expressions der ADF beliebig kombinieren.

Über dieselbe Technik können auch alle anderen internen ADF Objekte wie @pipeline(), @dataset() oder @activity() untersucht werden. Beispielsweise sieht das JSON eines Event Triggers folgendermaßen aus:

				
					{
  "name": "Trigger_12348CAF-BE66-42CF-83DA-E3028693F304",
  "outputs": {
    "headers": {
      "Host": "prod-1234.westeurope.logic.azure.com",
      "x-ms-client-tracking-id": "1234c153-fc96-4b8e-9002-0f5096bcd744",
      "Content-Length": "52",
      "Content-Type": "application/json; charset=utf-8"
    },
    "body": {
      "folderPath": "data",
      "fileName": "myFile.csv"
    }
  },
  "startTime": "2021-05-25T18:22:54.8383112Z",
  "endTime": "2021-05-25T18:22:54.8383112Z",
  "trackingId": "07b3d1a1-8735-4ff0-9cc6-c83d95046101",
  "clientTrackingId": "56dcc153-fc96-4b8e-9002-0f5096bcd744",
  "status": "Succeeded"
}

				
			

Dies sollte es Ihnen in Zukunft viel einfacher machen, mit ADF fortgeschrittene Datenlösungen zu erstellen.