Partager via


Activité Until dans Azure Data Factory et Synapse Analytics

S’APPLIQUE À : Azure Data Factory Azure Synapse Analytics

Conseil

Essayez Data Factory dans Microsoft Fabric, une solution d’analyse tout-en-un pour les entreprises. Microsoft Fabric couvre tous les aspects, du déplacement des données à la science des données, en passant par l’analyse en temps réel, l’aide à la décision et la création de rapports. Découvrez comment démarrer un nouvel essai gratuitement !

L’activité Until fournit les mêmes fonctionnalités qu’une structure de boucle do-until dans les langages de programmation. Elle exécute un ensemble d’activités dans une boucle jusqu’à ce que la condition associée à l’activité retourne la valeur true. Si une activité interne échoue, l’activité Until continue de s’exécuter sans s’interrompre. Vous pouvez spécifier une valeur de délai d’attente pour l’activité Until.

Créer une activité Until avec l’interface utilisateur

Pour utiliser une activité Until dans un pipeline, effectuez les étapes suivantes :

  1. Recherchez Until dans le volet Activités de pipeline, puis faites glisser une activité Until vers le canevas du pipeline.

  2. Veuillez sélectionner l’activité Until sur le canevas si elle ne l’est pas déjà, puis accéder à l’onglet Paramètres afin d’en modifier les propriétés.

    Montre l’onglet Paramètres de l’activité Until dans le canevas du pipeline.

  3. Veuillez renseigner une expression qui sera évaluée après l’exécution de l’ensemble des activités enfants définies dans l’activité Until. Lorsque l’expression est évaluée comme fausse, l’activité Until relance l’exécution de toutes ses activités enfants. Lorsqu’elle est évaluée comme vraie, l’activité Until s’achève. L’expression peut être une expression de chaîne littérale ou toute combinaison d’expressions dynamiques, de fonctions, de variables système ou de sorties d’autres activités. L’exemple ci-dessous vérifie la valeur d’une variable de tableau de pipeline précédemment définie appelée TestVariable pour voir si elle correspond à ['done'].

    Affichez le volet  Ajouter du contenu dynamique  avec une expression permettant de vérifier si une variable possède une valeur définie.

  4. Définissez les activités exécutées par l’activité Until en sélectionnant directement le bouton Modifier les activités sur l’activité Until ou en passant par l’onglet Activités pour les configurer à cet emplacement. Un nouveau volet d’édition des activités s’ouvre, dans lequel vous pouvez ajouter l’ensemble des activités que l’activité Until doit exécuter. Dans cet exemple, une activité Set Variable définit la valeur de la variable référencée sur « done ». L’expression de l’activité Until est donc vraie la première fois qu’elle est exécutée, puis l’activité Until s’arrête. Vous pouvez utiliser des variables similaires pour vérifier les conditions. L’activité Until exécute ses activités enfants à chaque évaluation de l’expression, jusqu’à ce que les conditions soient satisfaites. Lorsque vous itérez sur plusieurs activités, un délai dans la sortie de la boucle peut survenir en raison des opérations d’agrégation et de nettoyage effectuées par le pipeline.

    Montre l’éditeur d’activités pour une activité Until avec une activité Set Variable définie.

Syntaxe

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

Propriétés type

Propriété Description Valeurs autorisées Obligatoire
nom Nom de l’activité Until. String Oui
type Doit être défini sur Until. String Oui
expression Expression qui doit retourner true ou false Expression. Oui
timeout La boucle do-until expire à la fin du délai d’attente spécifié ici. Chaîne. d.hh:mm:ss(ou) hh:mm:ss. La valeur par défaut est de sept jours. Valeur maximale : 90 jours. Non
Activités Ensemble d’activités qui sont exécutées jusqu’à ce que l’expression retourne true. Tableau des activités. Oui

Exemple 1

Remarque

Cette section fournit des définitions JSON et des exemples de commandes PowerShell pour exécuter le pipeline. Pour une procédure pas à pas avec des instructions détaillées permettant de créer un pipeline en utilisant des définitions JSON et Azure PowerShell, consultez Didacticiel : créer une fabrique de données avec Azure PowerShell.

Pipeline avec activité Until

Dans cet exemple, le pipeline a deux activités : Until et Wait. L’activité Wait attend pendant la période spécifiée avant d’exécuter l’activité Web dans la boucle. Pour en savoir plus sur les expressions et fonctions, consultez Langage d'expression et fonctions.

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

Exemple 2

Le pipeline dans cet exemple copie les données depuis un dossier d’entrée vers un dossier de sortie dans une boucle. La boucle se termine quand la valeur du paramètre repeat est définie sur false ou après un délai d’attente d’une minute.

Pipeline avec l’activité 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"
            }                        
        }        
    }
}

Service lié Stockage Azure (AzureStorageLinkedService.json)

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

Jeu de données d’objets Blob Azure paramétrable (BlobDataset.json)

Le pipeline définit folderPath sur la valeur de paramètre outputPath1 ou outputPath2 du pipeline.

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

Code JSON des paramètres du pipeline (PipelineParameters.json)

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

Commandes PowerShell

Remarque

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour bien démarrer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell à partir d’AzureRM vers Az.

Ces commandes supposent que vous avez enregistré les fichiers JSON dans le dossier : 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
}

Consultez d’autres activités de flux de contrôle prises en charge :