Поделиться через


Создание триггера, который запускает конвейер в "переворачивающемся" окне

Область применения:Фабрика данных Azure Azure Synapse Analytics

Совет

Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !

Эта статья содержит шаги по созданию, запуску и мониторингу триггера "переворачивающегося" окна. Дополнительные сведения о триггерах и поддерживаемых типах см. в статье Выполнение конвейера и триггеры в фабрике данных Azure.

Триггер "переворачивающегося" окна — это тип триггера, который активируется с определенным интервалом начиная с указанного времени запуска, сохраняя состояние. "Переворачивающиеся" окна — это ряд неперекрывающихся и несоприкасающихся интервалов времени фиксированного размера. Триггер "переворачивающегося" окна имеет связь "один к одному" с конвейером и может ссылаться только на один конвейер. Периодический триггер является более тяжелой альтернативой для триггера по расписанию. Он предоставляет набор функций для сложных сценариев (зависимость от других периодических триггеров, повторный запуск невыполненного задания и установка повторной попытки пользователя для конвейеров). Дополнительные сведения о разнице между триггером по расписанию и периодическим триггером см. на этой странице.

Интерфейс портала Synapse и Фабрики данных Azure

  1. Чтобы создать периодический триггер на портале Azure, перейдите на вкладку Триггеры и щелкните Создать.
  2. На открывшейся панели конфигурации триггера выберите Tumbling Window ("Переворачивающееся" окно), а затем определите свойства периодического триггера.
  3. По завершении выберите Сохранить.

Свойства типа триггера "переворачивающегося" окна

"Переворачивающееся" окно имеет следующие свойства типа триггеров:

{
    "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 Тип триггера. Тип — фиксированное значение TumblingWindowTrigger. Строка "TumblingWindowTrigger" Да
runtimeState Текущее состояние времени выполнения триггера.
Примечание. Этот элемент — <readOnly>.
Строка "Started," "Stopped," "Disabled" Да
frequency Строка, представляющая единицу частоты (минуты, часы или месяцы), по которой триггер рекурсирует. Если значения даты startTime являются более детализированными, чем значение частоты, даты startTime учитываются при вычислении границ окна. Например, если значение частоты соответствует ежечасному выполнению, а значение startTime — 2017-09-01T10:10:10Z, первое окно будет (2017-09-01T10:10:10Z, 2017-09-01T11:10:10Z). Строка "Минута", "Час", "Месяц" Да
interval Положительное целое число, указывающее интервал для значения frequency, которое определяет, как часто выполняется триггер. Например, если interval имеет значение 3, а для элемента frequency выбран вариант "hour", триггер будет выполняться один раз каждые 3 часа.
Примечание. Минимальный интервал окна — 5 минут.
Целое Положительное целое число. Да
startTime Первое возникновение, которое может быть в прошлом. Первым интервалом триггера является (startTime, startTime + interval). Дата/время Значение даты и времени. Да
endTime Последнее возникновение, которое может быть в прошлом. Дата/время Значение даты и времени. Да
delay Время задержки до начала обработки данных окна. Запуск конвейера начинается после истечения ожидаемого времени выполнения плюс время задержки. Задержка определяет, как долго триггер ожидает, прежде чем начать новое выполнение по окончании предыдущего. Задержка не изменяет окно startTime. Например, значение задержки 00:10:00 подразумевает задержку длительностью 10 минут. Временной диапазон
(чч:мм:сс)
Значение времени, где время по умолчанию — 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 выполнений конвейера. Если готово только одно окно, значит готово только 1 выполнение конвейера. Целое Целое число от 1 до 50. Да
retryPolicy: Count Число повторных попыток, после которых выполнение конвейера будет помечено как "Failed". Целое Целое число, в котором значение по умолчанию — 0 (повторы отсутствуют). No
retryPolicy: intervalInSeconds Задержка между повторными попытками (в секундах). Целое Количество секунд, где значение по умолчанию — 30. Минимальное значение — 30. No
dependsOn: type Тип TumblingWindowTriggerReference. Требуется, если была задана зависимость. Строка TumblingWindowTriggerDependencyReference, SelfDependencyTumblingWindowTriggerReference No
dependsOn: size Размер "переворачивающегося" окна зависимости. Временной диапазон
(чч:мм:сс)
Положительное значение промежутка времени, где параметром по умолчанию является размер окна дочернего триггера No
dependsOn: offset Смещение триггера зависимости. Временной диапазон
(чч:мм:сс)
Значение промежутка времени, которое должно быть отрицательным в самозависимости. Если значение не указано, окно будет таким же, как и сам триггер. Самозависимость: да
Другое: нет

Примечание.

После публикации периодического триггера интервал и частота не могут быть изменены.

Системные переменные 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" соответственно.

Порядок выполнения окон в сценарии с обратным заполнением

Если для startTime триггера указано значение времени в прошлом, триггер на основе формулы M=(CurrentTime- TriggerStartTime)/TumblingWindowSize будет параллельно создавать задним числом запуски {M} backfill(past), учитывая параллелизм триггеров, перед выполнением будущих запусков. Порядок выполнения для окон детерминирован — от самых старых до самых новых интервалов. В настоящее время это поведение изменить невозможно.

Примечание.

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

Имеющиеся элементы TriggerResource

Следующие пункты касаются обновления имеющихся элементов TriggerResource:

  • После создания триггера изменение значения элемента периодичности (или размера окна) триггера и элемента интервала невозможно. Это необходимо для правильной работы повторов triggerRun и оценок зависимостей
  • Если значение для элемента endTime триггера изменяется (добавляется или обновляется), состояние окон, которые уже обрабатываются, не сбрасывается. Триггер использует новое значение endTime. Триггер останавливается, если новое значение endTime предшествует окну, которое уже выполняется. В противном случае триггер останавливается, когда встречается новое значение endTime.

Назначенные пользователем повторные выполнения конвейеров

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

Зависимость периодического триггера

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

Отмена выполнения "переворачивающегося" окна

Вы можете отменить выполнение периодического триггера, если требуемое окно находится в состоянии В ожидании, Waiting on Dependency (В ожидании зависимости) или Выполняется

  • Если окно находится в состоянии Выполняется, отмените связанный с ним запуск конвейера и выполнение триггера будет впоследствии отмечено как Отменено
  • Если окно находится в состоянии В ожидании или Waiting on Dependency (В ожидании зависимости), вы можете исключить это окно из мониторинга:

Вы также можете повторно запустить отмененное окно. При повторном выполнении будут использоваться последние опубликованные определения триггера, а зависимости для указанного окна будут повторно оценены после перезапуска

Пример для Azure PowerShell и Azure CLI

В этом разделе показано, как использовать Azure PowerShell для создания, запуска и мониторинга триггера.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Необходимые компоненты

Пример кода

  1. Создайте файл 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"
      }
    }
    
  2. Создайте триггер с помощью командлета Set-AzDataFactoryV2Trigger:

    Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
    
  3. Убедитесь, что триггер находится в состоянии Остановлено, используя командлет Get AzDataFactoryV2Trigger:

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  4. Запустите триггер с помощью командлета: Start-AzDataFactoryV2Trigger:

    Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  5. Убедитесь, что триггер находится в состоянии Запущено, используя командлет:Get-AzDataFactoryV2Trigger:

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  6. Получите сведения о выполнениях триггера в 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, см. в разделе Мониторинг конвейера.