Teilen ü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 alles ab, von der Datenverschiebung bis hin zu Data Science, Echtzeit-Analysen, Business Intelligence und Reporting. 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 auf 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 der Registerkarte „Einstellungen“ der Until-Aktivität 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. Bei einer Auswertung mit TRUE 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 den Bereich   Dynamische Inhalte hinzufügen   mit einem Ausdruck, um eine Variable auf einen definierten Wert zu überprüfen.

  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 Aktivität 'Variable setzen' den Wert der referenzierten Variable auf "done" fest. Der Ausdruck der Until-Aktivität ist also beim ersten Ausführen TRUE, und danach wird die Until-Aktivität beendet. Sie können ähnliche Variablen verwenden, um alle Bedingungen zu überprüfen. Die Until-Aktivität führt die untergeordneten Aktivitäten jedes Mal aus, wenn der Ausdruck ausgewertet wird, bis die Bedingungen erfüllt sind. Wenn Sie über mehrere Aktivitäten iterieren, kann es aufgrund der von der Pipeline durchgeführten Aggregation und Bereinigung zu einer Verzögerung beim Verlassen der Schleife kommen.

    Screenshot des Aktivitäten-Editors für eine Until-Aktivität mit definierter Aktivität zum Festlegen einer Variable

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. String. d.hh:mm:ss (oder) hh:mm:ss. Der Standardwert ist sieben Tage. Maximalwert: 90 Tage. Nein
Aktivitäten 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 outputPath1-Parameters oder den Wert des outputPath2-Parameters 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 Ordner "C:\ADF" gespeichert haben.

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: