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:
Zoek naar Until in het deelvenster Activiteiten van de pijplijn en sleep een Until-activiteit naar het pijplijncanvas.
Selecteer de activiteit Until op het canvas als deze nog niet is geselecteerd en het tabblad Instellingen om de details ervan te bewerken.
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'].
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.
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 |
---|---|---|---|
naam | Naam van de Until activiteit. |
String | Ja |
type | Moet worden ingesteld op Until. | String | Ja |
uitdrukking | Expressie die waar of onwaar moet evalueren | Uitdrukking. | Ja |
timeout | Er treedt een time-out op voor de do-until-lus na de opgegeven tijd hier. | 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 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
}
Gerelateerde inhoud
Bekijk andere ondersteunde controlestroomactiviteiten: