Действие Until в Фабрике данных Azure и Synapse Analytics
ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics
Совет
Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !
Действие Until выполняет те же функции, что и циклическая структура do-until в языках программирования. Оно выполняет набор действий в цикле, пока условие, связанное с действием, не получит значение true. Если внутренняя активность завершается ошибкой, действие "Пока" не останавливается. Можно указать значение времени ожидания для действия until.
Создание действия Until с помощью пользовательского интерфейса
Чтобы использовать действие Until в конвейере, выполните следующие действия:
Найдите "Пока" в области действий конвейера и перетащите действие "Пока" на холст конвейера.
Выберите действие "Пока" на холсте, если оно еще не выбрано, и вкладка "Параметры " для изменения сведений.
Введите выражение, которое будет вычисляться после выполнения всех дочерних действий, определенных в действии "Пока". Если выражение оценивается как false, действие "Пока" снова выполняет все дочерние действия. При оценке значения true действие "Пока" завершается. Можно использовать литеральное строковое выражение, а также любое сочетание динамических выражений, функций, системных переменных или выходных данных других действий. В приведенном ниже примере проверяется значение ранее определенной переменной массива конвейера с именем TestVariable, чтобы определить, имеет ли она значение ['done'].
Определите действия, выполняемые действием "Пока", нажав кнопку "Изменить действия" непосредственно в действии "Пока" или выбрав вкладку "Действия", чтобы выбрать ее. Появится новая область редактора действий, в которой можно добавить любые действия для выполнения действия "Пока". В этом примере действие Set Variable просто задает значение переменной, указанной в приведенном выше выражении, значение ['done], поэтому выражение действия "До" будет true при первом выполнении, и действие "Пока" будет остановлено. В реальных сценариях можно проверить любые необходимые условия, а действие Until продолжит выполнять свои дочерние действия при каждом вычислении выражения, пока эти условия не будут выполнены.
Синтаксис
{
"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
}
Связанный контент
Ознакомьтесь с другими поддерживаемыми действиями потока управления: