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 ne s’arrête pas. 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. Sélectionnez l’activité Until sur le canevas si elle ne l’est pas déjà, puis son onglet Paramètres pour en modifier les détails.

    Shows the Settings tab of the Until activity in the pipeline canvas.

  3. Entrez une expression qui sera évaluée après l’exécution de toutes les activités enfants définies dans l’activité Until. Si l’expression est évaluée à false, l’activité Until exécute toutes ses activités enfants. Lorsqu’elle est évaluée à true, l’activité Until se termine. 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'].

    Shows the  Add dynamic content  pane with an expression to check a variable for a defined value.

  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 sélectionnant l’onglet Activités pour effectuer votre choix. Un nouveau volet de l’éditeur d’activités s’affiche, dans lequel vous pouvez ajouter activités que l’activité Until devra exécuter. Dans cet exemple, une activité Set Variable définit simplement la valeur de la variable référencée dans l’expression susmentionnée sur [« done »], de sorte que l’expression de l’activité Until est vraie la première fois qu’elle est exécutée, et l’activité Until s’arrête. Dans votre utilisation réelle, vous pouvez vérifier toutes les conditions requises et l’activité jusqu’à ce que l’activité continue à exécuter ses activités enfants chaque fois que l’expression est évaluée, jusqu’à ce que les conditions soient remplies.

    Shows the activities editor for an Until activity with a Set Variable activity defined.

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
name 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
délai d'expiration 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

Notes

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

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis 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 :