Создание триггера, который запускает конвейер в "переворачивающемся" окне
ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics
Совет
Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !
Эта статья содержит шаги по созданию, запуску и мониторингу триггера "переворачивающегося" окна. Дополнительные сведения о триггерах и поддерживаемых типах см. в статье Выполнение конвейера и триггеры в фабрике данных Azure.
Триггер "переворачивающегося" окна — это тип триггера, который активируется с определенным интервалом начиная с указанного времени запуска, сохраняя состояние. Переворачивающиеся окна — это ряд фиксированных размеров, неперевершенных и смежных интервалов времени. Триггер "переворачивающегося" окна имеет связь "один к одному" с конвейером и может ссылаться только на один конвейер.
Триггер переворачивающегося окна — это более тяжелый вариант для триггера расписания. Он предлагает набор функций для сложных сценариев, таких как (зависимость от других триггеров переворачивающегося окна, повторное выполнение неудачного задания и настройка повторных попыток пользователя для конвейеров). Дополнительные сведения о разнице между триггером расписания и триггером переворачивающегося окна см. в разделе "Сравнение типов триггеров".
Фабрика данных Azure и портал Azure Synapse
- Чтобы создать периодический триггер на портале Azure, перейдите на вкладку Триггеры и щелкните Создать.
- После открытия области конфигурации триггера выберите "Переворачивающееся окно". Затем определите свойства триггера переворачивающегося окна.
- По завершении выберите Сохранить.
Свойства типа триггера "переворачивающегося" окна
"Переворачивающееся" окно имеет следующие свойства типа триггеров:
{
"name": "MyTriggerName",
"properties": {
"type": "TumblingWindowTrigger",
"runtimeState": "<<Started/Stopped/Disabled - readonly>>",
"typeProperties": {
"frequency": <<Minute/Hour>>,
"interval": <<int>>,
"startTime": "<<datetime>>",
"endTime": <<datetime - optional>>,
"delay": <<timespan - optional>>,
"maxConcurrency": <<int>> (required, max allowed: 50),
"retryPolicy": {
"count": <<int - optional, default: 0>>,
"intervalInSeconds": <<int>>,
},
"dependsOn": [
{
"type": "TumblingWindowTriggerDependencyReference",
"size": <<timespan - optional>>,
"offset": <<timespan - optional>>,
"referenceTrigger": {
"referenceName": "MyTumblingWindowDependency1",
"type": "TriggerReference"
}
},
{
"type": "SelfDependencyTumblingWindowTriggerReference",
"size": <<timespan - optional>>,
"offset": <<timespan>>
}
]
},
"pipeline": {
"pipelineReference": {
"type": "PipelineReference",
"referenceName": "MyPipelineName"
},
"parameters": {
"parameter1": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
},
"parameter2": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
},
"parameter3": "https://mydemo.azurewebsites.net/api/demoapi"
}
}
}
}
В следующей таблице представлен общий обзор основных элементов JSON, связанных с повторением и планированием триггера переворачивающегося окна.
Элемент JSON | Описание | Тип | Допустимые значения | Обязательное поле |
---|---|---|---|---|
type |
Тип триггера. Это type фиксированное значение TumblingWindowTrigger . |
String |
TumblingWindowTrigger |
Да |
runtimeState |
Текущее состояние времени выполнения триггера. Этот элемент <readOnly>. |
String |
Started , , Stopped Disabled |
Да |
frequency |
Строка, представляющая единицу частоты (минуты, часы или месяцы), по которой триггер рекурсирует. startTime Если значения даты более детализированы, чем frequency значение, startTime даты учитываются при вычислении границ окна. Например, если frequency значение равно hourly startTime 2017-09-01T10:10:10Z, первое окно — (2017-09-01T10:10Z, 2017-01T11:10Z, 2017-01T11:10:10Z). |
String |
Minute , , Hour Month |
Да |
interval |
Положительное целое число, указывающее интервал для frequency значения, которое определяет частоту выполнения триггера. Например, если interval и есть 3 frequency hour , триггер повторяется каждые 3 часа. Минимальный интервал окна составляет 5 минут. |
Integer |
Положительное целое число. | Да |
startTime |
Первое возникновение, которое может быть в прошлом. Первый интервал триггера — (startTime , startTime + interval ). |
DateTime |
Значение DateTime . |
Да |
endTime |
Последнее возникновение, которое может быть в прошлом. | DateTime |
Значение DateTime . |
Да |
delay |
Время задержки до начала обработки данных окна. Запуск конвейера начинается после истечения ожидаемого времени выполнения плюс время задержки. Задержка определяет, как долго триггер ожидает, прежде чем начать новое выполнение по окончании предыдущего. Задержка не изменяет окно startTime . Например, delay значение 00:10:00 подразумевает задержку в 10 минут. |
Timespan (чч:мм:сс) |
timespan Значение, в котором используется 00:00:00 значение по умолчанию. |
No |
maxConcurrency |
Количество одновременных выполнений триггеров, запущенных в окнах, которые готовы. Например, для резервного копирования почасовой запуск за вчерашний день приводит к 24 окнам. Если maxConcurrency = 10, события триггера запускаются только для первых 10 окон (00:00-01:00 - 09:00-10:00). После завершения первых 10 активированных выполнений конвейера выполнения триггер запускается для следующих 10 окон (10:00–11:00 — 19:00–20:00). Продолжая этот пример maxConcurrency = 10, если готово 10 окон, существует 10 общих запусков конвейера. Если будет готово только одно окно, выполняется только один конвейер. |
Integer |
Целое число от 1 до 50. | Да |
retryPolicy: Count |
Число повторных попыток перед запуском конвейера помечается как Failed . |
Integer |
Целое число, в котором значение по умолчанию — 0 (повторы отсутствуют). | No |
retryPolicy: intervalInSeconds |
Задержка между повторными попытками (в секундах). | Integer |
Количество секунд, где значение по умолчанию — 30. Минимальное значение — 30 . |
No |
dependsOn: type |
Тип параметра TumblingWindowTriggerReference . Требуется, если была задана зависимость. |
String |
TumblingWindowTriggerDependencyReference , SelfDependencyTumblingWindowTriggerReference |
No |
dependsOn: size |
Размер "переворачивающегося" окна зависимости. | Timespan (чч:мм:сс) |
Положительное timespan значение, в котором по умолчанию используется размер окна дочернего триггера. |
No |
dependsOn: offset |
Смещение триггера зависимости. | Timespan (чч:мм:сс) |
Значение timespan , которое должно быть отрицательным в самозависимости. Если значение не указано, окно совпадает с самим триггером. |
Самозависимость: да Другое: нет |
Примечание.
После публикации interval
триггера переворачивающегося окна невозможно изменить и frequency
изменить значения.
Системные переменные WindowStart и WindowEnd
В определении конвейера можно использовать WindowStart
системные WindowEnd
переменные триггера переворачивающегося окна (т. е. для части запроса). Передайте системные переменные в качестве параметров конвейера в определении триггера. В следующем примере показано, как передать эти переменные в качестве параметров.
{
"name": "MyTriggerName",
"properties": {
"type": "TumblingWindowTrigger",
...
"pipeline": {
"pipelineReference": {
"type": "PipelineReference",
"referenceName": "MyPipelineName"
},
"parameters": {
"MyWindowStart": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
},
"MyWindowEnd": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
}
}
}
}
}
Чтобы использовать WindowStart
значения переменных и WindowEnd
системных значений в определении конвейера, используйте соответствующие MyWindowStart
MyWindowEnd
параметры.
Порядок выполнения окон в сценарии с обратным заполнением
Если триггер находится в прошлом, то на основе формулы M=(CurrentTime- TriggerStartTime)/TumblingWindowSize триггер startTime
создает обратную заполнение {M} (прошлое) параллельно, учитывая параллелизм триггера перед выполнением будущих запусков. Порядок выполнения для окон детерминирован — от самых старых до самых новых интервалов. В настоящее время это поведение изменить невозможно.
Примечание.
В этом сценарии все запуски из выбранного параметра startTime
выполняются перед выполнением будущих запусков. Если вам нужно загрузить длительный период времени, рекомендуется выполнить начальную историческую нагрузку.
Имеющиеся элементы TriggerResource
Следующие моменты относятся к обновлению существующих TriggerResource
элементов:
- Значение для
frequency
элемента (или размера окна) триггера вместе сinterval
элементом невозможно изменить после создания триггера. Это ограничение необходимо для правильного функционирования повторныхtriggerRun
запусков и оценки зависимостей. - Если значение элемента
endTime
триггера изменяется (добавляя или обновляя), состояние уже обработанных окон не сбрасывается. Триггер учитывает новоеendTime
значение. Если новоеendTime
значение находится перед выполнением окон, триггер останавливается. В противном случае триггер останавливается при обнаружении новогоendTime
значения.
Повторные попытки, назначенные пользователем конвейеров
В случае сбоев конвейера триггер переворачивающегося окна может автоматически повторить выполнение указанного конвейера, используя те же входные параметры без вмешательства пользователя. retryPolicy
Используйте свойство в определении триггера, чтобы указать это действие.
Зависимость периодического триггера
Если вы хотите убедиться, что периодический триггер выполняется только после успешного выполнения другого периодического триггера в фабрике данных, создайте зависимость периодического триггера.
Отмена запуска переворачивающегося окна
Можно отменить запуски для триггера переворачивающегося окна, если определенное окно находится в состоянии ожидания, ожидания зависимости или состояния выполнения:
- Если окно находится в состоянии "Выполнение", отмените связанный запуск конвейера, а запуск триггера помечается как отмененный после этого.
- Если окно находится в состоянии ожидания или ожидания зависимости , можно отменить окно из мониторинга.
Вы также можете повторно запустить отмененное окно. Повторное выполнение принимает последние опубликованные определения триггера. Зависимости для указанного окна повторно вычисляются при повторном запуске.
Пример для Azure PowerShell и Azure CLI
В этом разделе показано, как использовать Azure PowerShell для создания, запуска и мониторинга триггера.
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Необходимые компоненты
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Azure PowerShell. Выполните инструкции по установке Azure PowerShell в Windows с помощью PowerShellGet.
- Фабрика данных Azure. Следуйте инструкциям в статье "Создание Фабрика данных Azure с помощью PowerShell для создания фабрики данных и конвейера".
Пример кода
Создайте файл JSON с именем MyTrigger.json в папке C:\ADFv2QuickStartPSH со следующим содержимым:
Внимание
Перед сохранением JSON-файла задайте для элемента значение текущего
startTime
времени UTC. Задайте значениеendTime
элемента в течение одного часа после текущего времени в формате UTC.{ "name": "PerfTWTrigger", "properties": { "type": "TumblingWindowTrigger", "typeProperties": { "frequency": "Minute", "interval": "15", "startTime": "2017-09-08T05:30:00Z", "endTime" : "2017-09-08T06:30:00Z", "delay": "00:00:01", "retryPolicy": { "count": 2, "intervalInSeconds": 30 }, "maxConcurrency": 50 }, "pipeline": { "pipelineReference": { "type": "PipelineReference", "referenceName": "DynamicsToBlobPerfPipeline" }, "parameters": { "windowStart": "@trigger().outputs.windowStartTime", "windowEnd": "@trigger().outputs.windowEndTime" } }, "runtimeState": "Started" } }
Создайте триггер с помощью командлета Set-AzDataFactoryV2Trigger:
Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
Убедитесь, что триггер находится в состоянии Остановлено, используя командлет Get AzDataFactoryV2Trigger:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Запустите триггер с помощью командлета: Start-AzDataFactoryV2Trigger:
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Убедитесь, что триггер находится в состоянии Запущено, используя командлет:Get-AzDataFactoryV2Trigger:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Получите сведения о выполнениях триггера в Azure PowerShell с помощью командлета Get-AzDataFactoryV2TriggerRun. Чтобы получить сведения о выполнениях триггера, периодически выполняйте следующую команду.
TriggerRunStartedAfter
Обновите значения иTriggerRunStartedBefore
значения, чтобы они соответствовали значениям в определении триггера:Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -TriggerName "MyTrigger" -TriggerRunStartedAfter "2017-12-08T00:00:00" -TriggerRunStartedBefore "2017-12-08T01:00:00"
Сведения о том, как отслеживать выполнения триггера и конвейера на портале Azure, см. в разделе Мониторинг конвейера.