Delen via


Totdat de activiteit in Azure Data Factory en Synapse Analytics voltooid is

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. Een reeks activiteiten wordt uitgevoerd in een lus totdat de aan de activiteit gekoppelde voorwaarde waar wordt bevonden. Als een interne activiteit mislukt, stopt de Totdat-activiteit niet. U kunt een time-outwaarde opgeven voor de until-activiteit.

Een until-activiteit maken met een UI

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 Until op het canvas als deze nog niet is geselecteerd en het tabblad Instellingen om de details ervan te bewerken.

    Toont het tabblad Instellingen van de activiteit Until in het pijplijncanvas.

  3. Voer een expressie in die wordt geëvalueerd nadat alle onderliggende activiteiten die zijn gedefinieerd in de Until-activiteit zijn voltooid. Als de expressie als onwaar wordt geëvalueerd, voert de Until-activiteit al haar onderliggende activiteiten opnieuw uit. Wanneer de evaluatie waar is, wordt de Totdat-activiteit 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'].

    Toont de   Dynamische inhoud toevoegen  deelvenster met een expressie om een variabele voor een gedefinieerde waarde te controleren.

  4. Definieer activiteiten die de Tot-activiteit uitvoert door de knop 'Activiteiten bewerken' direct op de Tot-activiteit te selecteren, of door het tabblad 'Activiteiten' te selecteren om het daar te bepalen. Er wordt een nieuw activiteiteneditorvenster weergegeven waar u activiteiten kunt toevoegen die door de Totdat-activiteit moeten worden uitgevoerd. In dit voorbeeld stelt de activiteit 'Variabele instellen' de waarde van de variabele waarnaar wordt verwezen in op 'gereed'. Dus de expressie van de Until-activiteit zal waar zijn de eerste keer dat deze wordt uitgevoerd, en daarna stopt de Until-activiteit. U kunt vergelijkbare variabelen gebruiken om eventuele voorwaarden te controleren. De activiteit Until voert de subactiviteiten uit telkens wanneer de expressie wordt geëvalueerd, totdat aan de voorwaarden wordt voldaan. Als u meerdere activiteiten doorloopt, kan er vertraging optreden bij het afsluiten van de lus vanwege aggregatie- en opschoonwerkzaamheden die door de pijplijn worden uitgevoerd.

    Toont de activiteiteneditor voor een Until-activiteit waarvoor een set-variabele-activiteit is gedefinieerd.

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

Eigendom Beschrijving Toegestane waarden Vereist
naam Naam van de Until activiteit. String Ja
type Moet worden ingesteld op Until. String Ja
uitdrukking Expressie die moet resulteren in waar of onwaar Uitdrukking. Ja
timeout Er treedt hier een time-out op voor de do-until-lus na de opgegeven tijd. Snaar. 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 zelfstudie: een data factory maken met behulp van Azure PowerShell en JSON-definities voor stapsgewijze instructies om een pijplijn te maken.

Pijplijn met een Until-activiteit

In dit voorbeeld heeft de pijplijn twee activiteiten: Tot en Wachten. De wachtactiviteit wacht gedurende 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 Tot-activiteit (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 óf outputPath1 óf 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: