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

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

Совет

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

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

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

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

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

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

    Shows the Settings tab of the Until activity in the pipeline canvas.

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

    Shows the  Add dynamic content  pane with an expression to check a variable for a defined value.

  4. Определите действия, выполняемые действием "Пока", нажав кнопку "Изменить действия" непосредственно в действии "Пока" или выбрав вкладку "Действия", чтобы выбрать ее. Появится новая область редактора действий, в которой можно добавить любые действия для выполнения действия "Пока". В этом примере действие set Variable просто задает значение переменной, указанной в приведенном выше упоминание выражении ['done'], поэтому выражение действия "До" будет иметь значение true при первом выполнении, а действие "Пока" будет остановлено. В реальных сценариях можно проверить любые необходимые условия, а действие Until продолжит выполнять свои дочерние действия при каждом вычислении выражения, пока эти условия не будут выполнены.

    Shows the activities editor for an Until activity with a Set Variable activity defined.

Синтаксис

{
    "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"
}

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

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

Пример 1

Примечание.

Этот раздел содержит определения JSON и примеры команд PowerShell для выполнения действий в конвейере. Пошаговые инструкции по созданию конвейера с помощью Azure PowerShell и определений JSON см. в этом руководстве.

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

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

{
    "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 (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. Дополнительные сведения см. в статье Перенос 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
}

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