Umgang mit britischen Feiertagen in Azure Data Factory und Synapse

Manchmal haben Sie Prozesse, die Sie in bestimmten Szenarien nicht ausführen müssen. Im vergangenen Jahr habe ich mit Markthandelsdaten gearbeitet. Der Handel an Börsen findet an jedem Wochentag statt, aber nicht an Wochenenden oder Feiertagen, da sie normalerweise geschlossen sind.

Dies stellt ein Problem für übliche ADF-Triggermuster dar, wo Sie können Zeitplan ziemlich komplex auslösenSzenarien wie der 1. Sonntag im Monat. Es gibt jedoch kein Konzept für nationale Feiertage, daher müssen wir dies nach dem Auslösepunkt behandeln.

Lassen Sie uns das Problem im Zusammenhang mit ADF noch einmal formulieren. Wir müssen also jeden Tag unseren Prozess auslösen wir müssen überprüfen, ob dieses Datum ein britischer Feiertag ist und führen Sie die Geschäftslogik aus.

Die britische Regierung hat mit dem Bau begonnen nützlicher Katalog von APIs zum Verzehr, einer davon enthält alle Feiertage. Die API gibt die folgenden JSON-Daten zurück.

curl '

Das Schema kann in zwei Schlüsselinformationen unterteilt werden:

  1. Das zutreffende Land mit den Werten England und Wales , Schottland & Nordirland auf der Wurzelebene.
  2. Eine Reihe von Veranstaltungen das enthält mehrere Eigenschaften wie z Titel (der Name des Feiertags) und Datum

Unser Ziel ist es also, die entsprechende Region für unsere Daten auszuwählen und dann die Daten zu filtern, um zu validieren, dass unser Eingabedatum mit keinem der in der obigen API aufgeführten übereinstimmt.

Unsere endgültige Pipeline wird so aussehen, bestehend aus 3 Aktivitäten und parametrisiert, damit sie als untergeordnete Pipeline in breiteren Orchestrierungsflüssen wiederverwendet werden kann. Der Code dafür ist unten noch einmal wiedergegeben.

paste-A1FC2AE6.png

Zuerst müssen wir unsere Pipeline mit dem einrichten Parameter und Variablen.

Wir müssen einen Parameter konfigurieren, um eine Datumseingabe zu akzeptieren, die von einem übergeordneten Prozess oder Trigger stammen kann. Wir haben das angerufen Datumpaste-9AFC4B75.png

Als nächstes brauchen wir eine Variable namens Feiertag um das Ergebnis der Frage Ist es ein Feiertag für dieses Datum?

einfügen-C372187F.png

EIN Web-Aktivität das ruft die https://www.gov.uk/bank-holidays.jsonEndpunkt. Es ist so konfiguriert paste-5AD2F23F.png

Die Ausgabe davon sollte so aussehen paste-9C5CE0F1.png

Das Aktivität filtern ermöglicht es, dieses Ereignisarray zu durchlaufen und passende Elemente zu finden.

paste-A81B4DAB.png

Wir müssen zuerst unsere Artikel definieren. Ich habe die Ereignisse in England und Wales manuell ausgewählt aber dieses könnte leicht dynamisch gemacht werden und bei Bedarf auf andere Regionen ausgeweitet. Der ADF-Ausdruck für Artikel ist

@activity('Get Bank Holidays').output['england-and-wales']['events']

Die Bedingungen, die wir verwenden, um diese ausgewählten Elemente zu filtern, sind

@contains(item().date, formatDateTime(pipeline().parameters.date,'yyyy-MM-dd'))

Wir prüfen, ob das Item den Parameter date enthält. Wir formatieren das Eingabedatum neu, um sicherzustellen, dass es keine Inkonsistenzen im Vergleich gibt. zB jjjj-mm-tt != mm-jjjj-tt

Was die folgende Struktur ausgibt:

  • ItemsCount – Die Anzahl der Artikel, die wir gesucht haben, um eine Übereinstimmung zu finden

  • FilteredItemsCount – Die Anzahl der Übereinstimmungen, die wir für dieses Datum gefunden haben

  • Wert – Ein Array von Übereinstimmungen für dieses Datum

Ein Beispiel für unseren Code, wenn wir mit dem Datum 2021-07-07 keine Übereinstimmung finden.

paste-2E3E8869.png

Ein Beispiel für ein erfolgreiches Spiel mit dem Datum 2021-04-05, dem Ostermontag in Großbritannien!

einfügen-C7DA67B7.png

Sie werden feststellen, dass FilteredItemsCount inkrementiert wurde, was die Eigenschaft ist, die wir in der nächsten Aktivität verwenden werden.

Jetzt haben wir also unsere Übereinstimmungen gefunden oder nicht, jetzt Wir müssen unsere Variable setzen, um die Frage zu beantworten! Wir verwenden a Variable Aktivität einstellen. Unsere Logik sollte ziemlich einfach sein, ist der FilteredItemCount = 1

einfügen-BC254285.png

Der ADF-Ausdruck sieht folgendermaßen aus

{.adf expression .adf} @equals(activity('Search Bank Holidays').output.FilteredItemsCount,1)

Fazit

Jetzt verfügen Sie über eine Azure Data Factory-Pipeline, die berechnen kann, ob ein bestimmter Tag ein britischer Feiertag oder ein regionaler Feiertag (Wales, Schottland oder Nordirland) ist.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *