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


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

ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics

Совет

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

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

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

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

Фабрика данных Azure и портал Azure Synapse

  1. Чтобы создать оконный периодический триггер на портале Azure, перейдите на вкладку Триггеры и щелкните Создать.
  2. После открытия области конфигурации триггера выберите "Переворачивающееся окно". Затем определите свойства триггера переворачивающегося окна.
  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 Тип триггера. Фиксированное значение type это TumblingWindowTrigger. String TumblingWindowTrigger Да
runtimeState Текущее состояние времени выполнения триггера.
Этот элемент <только для чтения>.
String Started Stopped Disabled Да
frequency Строка, представляющая единицу частоты (минуты, часы или месяцы), по которой триггер рекурсирует. startTime Если значения даты более детализированы, чем frequency значение, startTime даты учитываются при вычислении границ окна. Например, если значение frequency равно hourly, а значение startTime равно 2017-09-01T10:10:10Z, первое окно — (2017-09-01T10:10:10Z, 2017-09-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. Нет
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 (повторы отсутствуют). Нет
retryPolicy: intervalInSeconds Задержка между повторными попытками (в секундах). Integer Количество секунд, где значение по умолчанию — 30. Минимальное значение — 30. Нет
dependsOn: type Тип параметра TumblingWindowTriggerReference. Требуется, если установлена зависимость. String TumblingWindowTriggerDependencyReference, SelfDependencyTumblingWindowTriggerReference Нет
dependsOn: size Размер "переворачивающегося" окна зависимости. Timespan
(чч:мм:сс)
Положительное timespan значение, в котором по умолчанию используется размер окна дочернего триггера. Нет
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.

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

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

Примечание.

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

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

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

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

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

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

Зависимость триггера скользящего окна

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

Отмена запуска переворачивающегося окна

Можно отменить запуски для триггера переворачивающегося окна, если конкретное окно находится в состоянии Ожидания, Ожидания зависимости, или Выполнения:

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

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

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

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

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Чтобы узнать, как выполнить миграцию на модуль Az 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, см. Мониторинг конвейера.