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


Действие Until в Фабрике данных Azure и Synapse Analytics

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

Совет

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

Действие Until выполняет те же функции, что и циклическая структура do-until в языках программирования. Оно выполняет набор действий в цикле, пока условие, связанное с действием, не получит значение true. Если внутреннее действие завершается ошибкой, действие "Пока" не останавливается. Можно указать значение времени ожидания для действия until.

Создание действия Until с помощью пользовательского интерфейса

Чтобы использовать действие Until в конвейере, выполните следующие действия:

  1. Найдите "Пока" в области действий конвейера и перетащите действие "Пока" на холст конвейера.

  2. Выберите действие "Пока" на холсте, если оно еще не выбрано, и вкладку "Параметры", чтобы изменить ее сведения.

    Отображает вкладку настроек для действия Until на холсте конвейера.

  3. Введите выражение, которое будет вычисляться после выполнения всех дочерних действий, определенных в действии "Пока". Если выражение оценивается как ложное, действие "До тех пор, пока" снова выполняет все дочерние действия. При выполнении условия истинности действие "До тех пор, пока" завершается. Можно использовать литеральное строковое выражение, а также любое сочетание динамических выражений, функций, системных переменных или выходных данных других действий. В приведенном ниже примере проверяется значение ранее определенной переменной массива конвейера с именем TestVariable, чтобы определить, имеет ли она значение ['done'].

    Открывает панель

  4. Определите действия, выполняемые действием "Пока", нажав кнопку "Изменить действия" непосредственно в действии "Пока" или выбрав вкладку "Действия", чтобы выбрать ее. Отобразится новая панель редактора действий, в которой можно добавить любые действия для выполнения действия "До тех пор, пока". В этом примере действие Set Variable задает значение указанной переменной на "выполнено". Поэтому выражение действия "Пока" будет истинным при первом выполнении, а затем действие "Пока" будет остановлено. Для проверки условий можно использовать аналогичные переменные. Действие "Пока" выполняет дочерние действия при каждом вычислении выражения, пока не будут выполнены условия. Если вы выполняете итерацию по нескольким действиям, может возникнуть задержка при выходе из цикла из-за работы по агрегации и очистке, выполняемой конвейером.

    Отображение редактора действий для действия Until с определенным действие Set Variable.

Синтаксис

{
    "type": "Until",
    "typeProperties": {
        "expression":  {
            "value":  "<expression that evaluates to true or false>", 
            "type": "Expression"
        },
        "timeout": "<time out for the loop. for example: 00:10:00 (10 minute)>",
        "activities": [
            {
                "<Activity 1 definition>"
            },
            {
                "<Activity 2 definition>"
            },
            {
                "<Activity N definition>"
            }
        ]
    },
    "name": "MyUntilActivity"
}

Свойства типа

Свойство Описание Допустимые значения Обязательное поле
имя Имя действия Until. Строка Да
тип Необходимо установить значение на Until. Строка Да
выражение Выражение, которое должно оцениваться как истинное или ложное. Выражение. Да
таймаут Цикл do-until прекращается по истечении указанного здесь времени. Строка. d.hh:mm:ss (или) hh:mm:ss. Значение по умолчанию — семь дней. Максимальное значение — 90 дней. Нет
Деятельности Набор действий, которые выполняются до тех пор, пока выражение не получит значение true. Набор действий. Да

Пример 1

Примечание.

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

Конвейер с действием Until

В этом примере конвейер содержит два действия: Until и Wait. Действие Wait ожидает в течение указанного периода времени перед запуском действия Web в цикле. Дополнительные сведения о языке выражений и функциях см. в статье Язык выражений и функции.

{
    "name": "DoUntilPipeline",
    "properties": {
        "activities": [
            {
                "type": "Until",
                "typeProperties": {
                    "expression": {
                        "value": "@equals('Failed', coalesce(body('MyUnauthenticatedActivity')?.status, actions('MyUnauthenticatedActivity')?.status, 'null'))",
                        "type": "Expression"
                    },
                    "timeout": "00:10:00",
                    "activities": [
                        {
                            "name": "MyUnauthenticatedActivity",
                            "type": "WebActivity",
                            "typeProperties": {
                                "method": "get",
                                "url": "https://www.fake.com/",
                                "headers": {
                                    "Content-Type": "application/json"
                                }
                            },
                            "dependsOn": [
                                {
                                    "activity": "MyWaitActivity",
                                    "dependencyConditions": [ "Succeeded" ]
                                }
                            ]
                        },
                        {
                            "type": "Wait",
                            "typeProperties": {
                                "waitTimeInSeconds": 1
                            },
                            "name": "MyWaitActivity"
                        }
                    ]
                },
                "name": "MyUntilActivity"
            }
        ]
    }
}

Пример 2

В этом примере конвейер в цикле копирует данные из входной папки в выходную папку. Цикл завершается, когда значение параметра repeat станет равным false или по истечении одной минуты.

Конвейер с действием Until (Adfv2QuickStartPipeline.json)

{
    "name": "Adfv2QuickStartPipeline",
    "properties": {
        "activities": [
            {
                "type": "Until",
                "typeProperties": {
                    "expression":  {
                        "value":  "@equals('false', pipeline().parameters.repeat)", 
                        "type": "Expression"
                    },
                    "timeout": "00:10:00",
                    "activities": [
                        {
                            "name": "CopyFromBlobToBlob",
                            "type": "Copy",
                            "inputs": [
                                {
                                    "referenceName": "BlobDataset",
                                    "parameters": {
                                        "path": "@pipeline().parameters.inputPath"
                                    },
                                    "type": "DatasetReference"
                                }
                            ],
                            "outputs": [
                                {
                                    "referenceName": "BlobDataset",
                                    "parameters": {
                                        "path": "@pipeline().parameters.outputPath"
                                    },
                                    "type": "DatasetReference"
                                }
                            ],
                            "typeProperties": {
                                "source": {
                                    "type": "BlobSource"
                                },
                                "sink": {
                                    "type": "BlobSink"
                                }
                            },
                            "policy": {
                                "retry": 1,
                                "timeout": "00:10:00",
                                "retryIntervalInSeconds": 60
                            }
                        }
                    ]
                },
                "name": "MyUntilActivity"
            }
        ],
        "parameters": {
            "inputPath": {
                "type": "String"
            },
            "outputPath": {
                "type": "String"
            },
            "repeat": {
                "type": "String"
            }                        
        }        
    }
}

Связанная служба хранилища Azure (AzureStorageLinkedService.json)

{
    "name": "AzureStorageLinkedService",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<Azure Storage account name>;AccountKey=<Azure Storage account key>"
        }
    }
}

Параметризованный набор данных Azure Blob (BlobDataset.json)

Конвейер устанавливает для параметра folderPath значение outputPath1 или outputPath2.

{
    "name": "BlobDataset",
    "properties": {
        "type": "AzureBlob",
        "typeProperties": {
            "folderPath": {
                "value": "@{dataset().path}",
                "type": "Expression"
            }
        },
        "linkedServiceName": {
            "referenceName": "AzureStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "path": {
                "type": "String"
            }
        }
    }
}

JSON-файл с параметрами конвейера (PipelineParameters.json)

{
    "inputPath": "adftutorial/input",
    "outputPath": "adftutorial/outputUntil",
    "repeat": "true"
}

Команды PowerShell

Примечание.

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

Эти команды предполагают, что файлы JSON сохранены в папке: C:\ADF.

Connect-AzAccount
Select-AzSubscription "<Your subscription name>"

$resourceGroupName = "<Resource Group Name>"
$dataFactoryName = "<Data Factory Name. Must be globally unique>";
Remove-AzDataFactoryV2 $dataFactoryName -ResourceGroupName $resourceGroupName -force


Set-AzDataFactoryV2 -ResourceGroupName $resourceGroupName -Location "East US" -Name $dataFactoryName
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -DefinitionFile "C:\ADF\AzureStorageLinkedService.json"
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "BlobDataset" -DefinitionFile "C:\ADF\BlobDataset.json"
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "Adfv2QuickStartPipeline" -DefinitionFile "C:\ADF\Adfv2QuickStartPipeline.json"
$runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName "Adfv2QuickStartPipeline" -ParameterFile C:\ADF\PipelineParameters.json

while ($True) {
    $run = Get-AzDataFactoryV2PipelineRun -ResourceGroupName $resourceGroupName -DataFactoryName $DataFactoryName -PipelineRunId $runId

    if ($run) {
        if ($run.Status -ne 'InProgress') {
            Write-Host "Pipeline run finished. The status is: " $run.Status -foregroundcolor "Yellow"
            $run
            break
        }
        Write-Host  "Pipeline is running...status: InProgress" -foregroundcolor "Yellow"
        Write-Host "Activity run details:" -foregroundcolor "Yellow"
        $result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30)
        $result

        Write-Host "Activity 'Output' section:" -foregroundcolor "Yellow"
        $result.Output -join "`r`n"
    }

    Start-Sleep -Seconds 15
}

Ознакомьтесь с другими поддерживаемыми действиями потока управления: