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


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

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

Совет

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

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

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

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

Фабрика данных 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 Текущее состояние времени выполнения триггера.
Этот элемент <readOnly>.
String Started, , StoppedDisabled Да
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, , HourMonth Да
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.

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

Пример кода

  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, см. в разделе Мониторинг конвейера.