共用方式為


Azure Data Factory 和 Synapse Analytics 中的 Until 活動

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用 (部分機器翻譯)!

Until 活動所提供的功能,與 do-until 迴圈結構在程式設計語言中提供的功能相同。 它會以迴圈的方式執行一系列活動,直到與該活動相關聯的條件評估為 True 為止。 如果內部活動失敗,則 Until 活動不會停止。 您可以指定 Until 活動的逾時值。

使用 UI 建立 Until 活動

若要在管線中使用 Until 活動,請完成下列步驟:

  1. 在管線 [活動] 窗格中搜尋 [Until],然後將 Until 活動拖曳至管線畫布。

  2. 如果尚未選取 [直到] 活動,請選取畫布上的 [直到] 活動,以及其 [設定] 索引卷標,以編輯其詳細數據。

    顯示管線畫布中 [直到] 活動的 [設定] 索引標籤。

  3. 輸入將在執行 Until 活動中定義的所有子活動之後評估的表達式。 如果表達式評估為 false,則 Until 活動會再次執行其所有子活動。 當評估為 true 時,Until 活動就會完成。 運算式可以是常值字串運算式,或是任何動態運算式、函式系統變數其他活動輸出的組合。 下列範例會檢查先前定義管線陣列變數 (稱為 TestVariable) 的值,以查看其是否評估為 ['done']。

    顯示  新增動態內容 具有表達式的窗格,可檢查已定義值的變數。

  4. 藉由直接選取 [直到活動] 上的 [編輯活動] 按鈕,或選取 [活動] 索引卷標來選取活動,來定義 [直到] 活動執行的活動。 隨即會顯示新的活動編輯器窗格,您可以在其中新增要執行之 Until 活動的任何活動。 在此範例中,Set Variable 活動只會將上述表達式中所參考的變數值設定為 ['done'],因此 Until 活動的表達式會在第一次執行時為 true,而 Until 活動將會停止。 在真實世界使用中,您可以檢查所需的任何條件,而且 Until 活動會在每次評估運算式時繼續執行其子活動,直到符合條件為止。

    顯示已定義 Set Variable 活動之 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"
}

類型屬性

屬性 說明 允許的值 必要
NAME Until 活動的名稱。 String Yes
type 必須設為 Until String Yes
expression 必須評估為 true 或 false 的運算式 運算式。 Yes
timeout do-until 迴圈在經過於此指定的時間之後便會逾時。 字串。 d.hh:mm:ss (或) hh:mm:ss。 預設值為七天。 最大值為 90 天。 No
活動 會在運算式評估為 true 之前持續執行的一系列活動。 一系列的活動。 Yes

範例 1

注意

本節提供 JSON 定義和 PowerShell 命令範例,以供執行管線。 針對使用 Azure PowerShell 和 JSON 定義來建立管線,如需包含逐步指示的逐步解說,請參閱教學課程:使用 Azure PowerShell 來建立資料處理站

具有 Until 活動的管線

在此範例中,管線有兩個活動:UntilWait。 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

此範例中的管線會以迴圈的方式,將資料從輸入資料夾複製到輸出資料夾。 在重複參數的值設為 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 設定為管線的 outputPath1outputPath2 參數。

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

查看其他支援的控制流程活動: