Totdat activiteit in Azure Data Factory en Synapse Analytics

VAN TOEPASSING OP: Azure Data Factory Azure Synapse Analytics

Tip

Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .

De activiteit Until biedt dezelfde functionaliteit als de lusstructuur do-until in een programmeertaal. Er wordt een reeks activiteiten uitgevoerd totdat de voorwaarde die aan de activiteit is gekoppeld, resulteert in waar. Als een interne activiteit mislukt, stopt de activiteit Totdat de activiteit niet stopt. U kunt een time-outwaarde opgeven voor de activiteit tot de activiteit.

Een until-activiteit maken met de gebruikersinterface

Voer de volgende stappen uit om een Until-activiteit in een pijplijn te gebruiken:

  1. Zoek naar Until in het deelvenster Activiteiten van de pijplijn en sleep een Until-activiteit naar het pijplijncanvas.

  2. Selecteer de activiteit Tot op het canvas als deze nog niet is geselecteerd en het bijbehorende tabblad Instellingen om de details ervan te bewerken.

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

  3. Voer een expressie in die wordt geëvalueerd nadat alle onderliggende activiteiten die zijn gedefinieerd in de activiteit Until worden uitgevoerd. Als de expressie onwaar is, voert de activiteit Until alle onderliggende activiteiten opnieuw uit. Wanneer de activiteit waar wordt geëvalueerd, wordt de activiteit Totdat de activiteit is voltooid. De expressie kan een letterlijke tekenreeksexpressie zijn of een combinatie van dynamische expressies, functies, systeemvariabelen of uitvoer van andere activiteiten. In het onderstaande voorbeeld wordt de waarde gecontroleerd van een eerder gedefinieerde pijplijnmatrixvariabele met de naam TestVariable om te zien of deze resulteert in ['done'].

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

  4. Definieer activiteiten die door de activiteit Tot worden uitgevoerd door de knop Activiteiten bewerken te selecteren op de Activiteit rechtstreeks of door het tabblad Activiteiten te selecteren om deze daar te selecteren. Er wordt een nieuw deelvenster van de activiteiteneditor weergegeven, waar u activiteiten kunt toevoegen voor de te uitvoeren activiteit Totdat u de activiteit uitvoert. In dit voorbeeld wordt met een activiteit Variabele instellen de waarde van de variabele waarnaar in de bovengenoemde expressie wordt verwezen, ingesteld op ['done'], zodat de expressie van de activiteit Tot waar is wanneer deze voor het eerst wordt uitgevoerd, en de until-activiteit stopt. In uw praktijkgebruik kunt u alle vereiste voorwaarden controleren en de activiteit Until blijft de onderliggende activiteiten uitvoeren telkens wanneer de expressie wordt geëvalueerd, totdat aan de voorwaarden wordt voldaan.

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

Syntaxis

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

Typeeigenschappen

Eigenschappen Beschrijving Toegestane waarden Vereist
name Naam van de Until activiteit. String Ja
type Moet worden ingesteld op Until. String Ja
Expressie Expressie die waar of onwaar moet evalueren Expressie. Ja
timeout Er treedt een time-out op voor de do-until-lus na de opgegeven tijd hier. Tekenreeks. d.hh:mm:ss (of) hh:mm:ss. De standaardwaarde is zeven dagen. Maximumwaarde is: 90 dagen. Nee
Activiteiten Set activiteiten die worden uitgevoerd totdat de expressie resulteert in true. Matrix van activiteiten. Ja

Voorbeeld 1

Notitie

Deze sectie bevat JSON-definities en PowerShell-voorbeeldopdrachten om de pijplijn uit te voeren. Zie de zelfstudie: Een data factory maken met behulp van Azure PowerShell- en JSON-definities voor stapsgewijze instructies voor het maken van een pijplijn.

Pijplijn met until-activiteit

In dit voorbeeld heeft de pijplijn twee activiteiten: Tot en Wachten. De wachtactiviteit wacht op de opgegeven periode voordat de webactiviteit in de lus wordt uitgevoerd. Zie Expressietaal en -functies voor meer informatie over expressies en functies.

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

Voorbeeld 2

De pijplijn in dit voorbeeld kopieert gegevens uit een invoermap naar een uitvoermap in een lus. De lus wordt beëindigd wanneer de waarde voor de herhalingsparameter is ingesteld op onwaar of er na één minuut een time-out optreedt.

Pijplijn met activiteit tot (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"
            }                        
        }        
    }
}

Gekoppelde Azure Storage-service (AzureStorageLinkedService.json)

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

Geparameteriseerde Azure Blob-gegevensset (BlobDataset.json)

De pijplijn stelt het folderPath in op de waarde van de parameter outputPath1 of outputPath2 van de pijplijn.

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

JSON voor pijplijnparameter (PipelineParameters.json)

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

PowerShell-opdrachten

Notitie

Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

Bij deze opdrachten wordt ervan uitgegaan dat u de JSON-bestanden hebt opgeslagen in de map 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
}

Bekijk andere ondersteunde controlestroomactiviteiten: