Обработка государственных праздников Великобритании в Azure Data Factory и Synapse

Иногда у вас есть процессы, которые вам не нужно запускать в определенных сценариях. В прошлом году я работал с рыночными торговыми данными. Торговля на биржах происходит каждый будний день, но не в выходные или национальные праздники, поскольку они обычно закрыты.

Это создает проблему для обычных шаблонов запуска ADF, где вы можете расписание довольно сложный триггерсценарии, такие как 1-е воскресенье каждого месяца. Однако понятия национальных праздников не существует, поэтому нам нужно обработать это после триггерной точки.

Итак, давайте переформулируем проблему в контексте ADF. Нам нужно запускать наш процесс каждый день, затем мы должны проверить, является ли эта дата выходным днем ​​в Великобритании и запустить бизнес-логику.

Правительство Великобритании приступило к строительству полезный каталог API для потребления, один из которых содержит все праздничные дни. API возвращает следующие данные json.

curl '

Схему можно разбить на две ключевые части информации:

  1. Применимая страна со значениями Англия и Уэльс , Шотландия & Северная Ирландия на корневом уровне.
  2. Массив События который содержит несколько свойств, таких как Заголовок (название праздника) и Дата

Итак, наша цель — выбрать подходящий регион для наших данных, а затем отфильтровать даты, чтобы убедиться, что наша введенная дата не соответствует ни одной из перечисленных в приведенном выше API.

Наш окончательный конвейер будет состоять из 3 действий и параметризован, чтобы его можно было повторно использовать в качестве дочернего конвейера в более широких потоках оркестровки. Код для этого воспроизводится внизу.

паста-A1FC2AE6.png

Сначала нам нужно настроить наш конвейер с помощью параметры и переменные.

Нам нужно настроить параметр для приема ввода даты, который может быть от родительского процесса или триггера. Мы назвали это датапаста-9AFC4B75.png

Далее нам нужна переменная с именем Банковский выходной для сохранения ответа на вопрос «Это выходной день на эту дату?»

паста-C372187F.png

А веб-активность который вызывает https://www.gov.uk/bank-holidays.jsonконечная точка. Он настроен так паста-5AD2F23F.png

Результат этого должен выглядеть паста-9C5CE0F1.png

Активность фильтра позволяет использовать для перебора этого массива событий и поиска совпадающих элементов.

паста-A81B4DAB.png

Сначала мы должны определить наши элементы. Я вручную выбрал события Англии и Уэльса но это можно легко сделать динамичным и распространяется на другие регионы по запросу. Выражение ADF для элементов:

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

Условия, которые мы будем использовать для фильтрации этих выбранных элементов:

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

Проверяем, что элемент содержит параметр date. Мы переформатируем введенную дату, чтобы гарантировать отсутствие несоответствий в сравнении. например гггг-мм-дд != мм-гггг-дд

Что выводит следующую структуру:

  • ItemsCount — количество элементов, которые мы искали, чтобы попытаться найти совпадение.

  • FilteredItemsCount — количество найденных совпадений на указанную дату.

  • Значение — массив совпадений для указанной даты

Пример нашего кода, когда мы не находим совпадения по дате 2021-07-07.

паста-2E3E8869.png

Пример успешного сопоставления с использованием даты 2021-04-05, которая в Великобритании является пасхальным понедельником!

паста-C7DA67B7.png

Вы заметите, что свойство FilteredItemsCount увеличилось, и это свойство мы будем использовать в следующем действии.

Итак, теперь мы нашли наши совпадения или нет, теперь нам нужно установить нашу переменную, чтобы ответить на вопрос! Мы будем использовать установить переменную активность. Наша логика должна быть довольно простой, делает FilteredItemCount = 1

паста-BC254285.png

Выражение ADF выглядит так

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

Заключение

Теперь у вас есть конвейер Фабрики данных Azure, который может рассчитать, является ли данный день выходным днем ​​в Соединенном Королевстве или региональным выходным днем ​​(Уэльс, Шотландия или Северная Ирландия).

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *