Freigeben über


Until-Aktivität in Azure Data Factory und Synapse Analytics

GILT FÜR: Azure Data Factory Azure Synapse Analytics

Tipp

Testen Sie Data Factory in Microsoft Fabric, eine All-in-One-Analyselösung für Unternehmen. Microsoft Fabric deckt alle Aufgaben ab, von der Datenverschiebung bis hin zu Data Science, Echtzeitanalysen, Business Intelligence und Berichterstellung. Erfahren Sie, wie Sie kostenlos eine neue Testversion starten!

Die Until-Aktivität erfüllt die gleiche Funktion wie eine do-until-Schleifenstruktur in Programmiersprachen. Sie führt eine Reihe von Aktivitäten in einer Schleife aus, bis die der Aktivität zugeordnete Bedingung als „true“ ausgewertet wird. Wenn bei einer inneren Aktivität ein Fehler auftritt, wird die Until-Aktivität nicht beendet. Sie können einen Timeoutwert für die Until-Aktivität angeben.

Erstellen einer Until-Aktivität mit der Benutzeroberfläche

Führen Sie die folgenden Schritte aus, um eine Until-Aktivität in einer Pipeline zu verwenden:

  1. Suchen Sie im Bereich mit den Pipelineaktivitäten nach Until, und ziehen Sie eine Until-Aktivität auf die Pipelinecanvas.

  2. Wählen Sie in diesem Bereich die neue Until-Aktivität aus (wenn sie noch nicht ausgewählt wurde), und wählen Sie anschließend die Registerkarte Einstellungen aus, um die Details zu bearbeiten.

    Screenshot: Registerkarte Einstellungen“ auf der Pipeline-Canvas

  3. Geben Sie einen Ausdruck ein, der ausgewertet wird, nachdem alle in der Until-Aktivität definierten untergeordneten Aktivitäten ausgeführt wurden. Wenn der Ausdruck zu „false“ ausgewertet wird, führt die Until-Aktivität alle ihre untergeordneten Aktivitäten erneut aus. Wenn er zu „true“ ausgewertet wird, wird die Until-Aktivität abgeschlossen. Der Ausdruck können literale Zeichenfolgenausdrücke oder eine beliebige Kombination aus dynamischen Ausdrücken, Funktionen, Systemvariablenoder Ausgaben von anderen Aktivitäten sein. Im folgenden Beispiel wird der Wert einer zuvor definierten Pipelinearrayvariablen namens TestVariable daraufhin überprüft, ob er zu ['done'] (erledigt) ausgewertet wird.

    Zeigt Bereich nbsp;Dynamischen Inhalt hinzufügennbsp; mit einem Ausdruck zum Überprüfen einer Variablen auf einen definierten Wert.

  4. Definieren Sie Aktivitäten, welche die Until-Aktivität ausführen wird, indem Sie direkt auf der Until-Aktivität auf die Schaltfläche „Aktivitäten bearbeiten“ klicken, oder indem Sie die Registerkarte „Aktivitäten“ auswählen, um sie dort auszuwählen. Ein Editor-Bereich für neue Aktivitäten wird angezeigt, in dem Sie alle Aktivitäten hinzufügen können, welche die Until-Aktivität ausführen soll. In diesem Beispiel legt eine „Set Variable“-Aktivität einfach den Wert der Variablen, auf die im voranstehenden Ausdruck verwiesen wird, auf ['done'] fest, sodass der Ausdruck der Until-Aktivität bei der ersten Ausführung „true“ ist, woraufhin die Until-Aktivität beendet wird. In Ihrer realen Verwendung können Sie alle erforderlichen Bedingungen überprüfen, und die Until-Aktivität führt ihre untergeordneten Aktivitäten bei jeder Auswertung des Ausdrucks weiter aus, bis die Bedingungen erfüllt sind.

    Aktivitäten-Editor für eine Until-Aktivität mit definierter Set Variable-Aktivität

Syntax

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

Typeigenschaften

Eigenschaft BESCHREIBUNG Zulässige Werte Erforderlich
name Der Name der Until-Aktivität. String Ja
type Muss auf Until festgelegt werden. String Ja
expression Ausdruck, der als „true“ oder „false“ ausgewertet werden muss. Ausdruck Ja
timeout Für die do-until-Schleife tritt nach der hier angegebenen Zeit ein Timeout auf. Eine Zeichenfolge. d.hh:mm:ss oder hh:mm:ss. Der Standardwert ist sieben Tage. Maximalwert: 90 Tage. Nein
activities Reihe von Aktivitäten, die ausgeführt werden, bis der Ausdruck als true ausgewertet wird. Array von Aktivitäten Ja

Beispiel 1

Hinweis

Dieser Abschnitt enthält die JSON-Definitionen und PowerShell-Beispielbefehle zum Ausführen der Pipeline. Eine exemplarische Vorgehensweise mit einer ausführlichen Anleitung zum Erstellen einer Pipeline mithilfe von Azure PowerShell und JSON-Definitionen finden Sie im Tutorial zum Erstellen einer Data Factory mithilfe von Azure PowerShell.

Pipeline mit Until-Aktivität

In diesem Beispiel besitzt die Pipeline zwei Aktivitäten: Until und Wait. Die Wait-Aktivität führt nach der angegebenen Wartezeit die Web-Aktivität in der Schleife aus. Weitere Informationen zu Ausdrücken und Funktionen finden Sie unter Ausdruckssprache und Funktionen.

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

Beispiel 2

Die Pipeline in diesem Beispiel kopiert Daten aus einem Eingabeordner im Rahmen einer Schleife in einen Ausgabeordner. Die Schleife endet, wenn der Wert für den repeat-Parameter auf „false“ festgelegt wird oder nach einer Minute ein Timeout auftritt.

Pipeline mit Until-Aktivität (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"
            }                        
        }        
    }
}

Mit Azure Storage verknüpfter Dienst (AzureStorageLinkedService.json)

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

Parametrisiertes Azure Blob-Dataset (BlobDataset.json)

Die Pipeline legt für folderPath entweder den Wert des Parameters outputPath1 oder den Wert des Parameters outputPath2 der Pipeline fest.

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

JSON-Datei mit Pipelineparametern (PipelineParameters.json)

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

PowerShell-Befehle

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren von Azure PowerShell. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Bei diesen Befehlen wird davon ausgegangen, dass Sie die JSON-Dateien im folgenden Ordner gespeichert haben: 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
}

Informationen zu weiteren unterstützten Ablaufsteuerungsaktivitäten: