Tills aktivitet i Azure Data Factory och Synapse Analytics

GÄLLER FÖR: Azure Data Factory Azure Synapse Analytics

Dricks

Prova Data Factory i Microsoft Fabric, en allt-i-ett-analyslösning för företag. Microsoft Fabric omfattar allt från dataflytt till datavetenskap, realtidsanalys, business intelligence och rapportering. Lär dig hur du startar en ny utvärderingsversion kostnadsfritt!

Aktiviteten Until fungerar på samma sätt som en do-until-loopstruktur i ett programmeringsspråk. En uppsättning aktiviteter körs i en loop tills det villkor som är associerat med aktiviteten utvärderas till sant. Om en inre aktivitet misslyckas stoppas inte Aktiviteten Tills. Du kan ange ett timeout-värde för aktiviteten tills.

Skapa en Until-aktivitet med användargränssnittet

Utför följande steg för att använda en Until-aktivitet i en pipeline:

  1. Sök efter Till i fönstret Pipelineaktiviteter och dra en Till-aktivitet till pipelinearbetsytan.

  2. Välj aktiviteten Till på arbetsytan om den inte redan är markerad och dess Inställningar flik för att redigera dess information.

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

  3. Ange ett uttryck som ska utvärderas när alla underordnade aktiviteter som definierats i aktiviteten Tills har körts. Om uttrycket utvärderas till falskt kör aktiviteten Tills alla dess underordnade aktiviteter igen. När den utvärderas till true slutförs aktiviteten Tills den är klar. Uttrycket kan vara ett literalt stränguttryck eller en kombination av dynamiska uttryck, funktioner, systemvariabler eller utdata från andra aktiviteter. Exemplet nedan kontrollerar värdet för en tidigare definierad pipelinematrisvariabel med namnet TestVariable för att se om den utvärderas till ['klar'].

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

  4. Definiera aktiviteter som aktiviteten Tills körs genom att välja knappen Redigera aktiviteter på aktiviteten Till direkt eller genom att välja fliken Aktiviteter för att välja den där. Ett nytt fönster för aktivitetsredigeraren visas där du kan lägga till aktiviteter som aktiviteten Tills ska köras. I det här exemplet anger en Set Variable-aktivitet helt enkelt värdet för variabeln som refereras i ovan nämnda uttryck till ['done'], så tills-aktivitetens uttryck blir sant första gången den körs och aktiviteten Until stoppas. I din verkliga användning kan du kontrollera alla villkor som krävs och aktiviteten Until fortsätter att köra sina underordnade aktiviteter varje gång uttrycket utvärderas tills villkoren är uppfyllda.

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

Syntax

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

Typegenskaper

Property beskrivning Tillåtna värden Obligatoriskt
name Namnet på Until aktiviteten. String Ja
type Måste anges till Till. String Ja
Uttryck Uttryck som måste utvärderas till sant eller falskt Uttryck. Ja
timeout Do-Until-loopen överskrider tidsgränsen efter den angivna tiden här. Sträng. d.hh:mm:ss (eller) hh:mm:ss. Standardvärdet är sju dagar. Maximalt värde är: 90 dagar. Nej
Aktiviteter Uppsättning aktiviteter som körs tills uttrycket utvärderas till true. Matris med aktiviteter. Ja

Exempel 1

Kommentar

Det här avsnittet innehåller JSON-definitioner och PowerShell-exempelkommandon för att köra pipelinen. En genomgång med stegvisa instruktioner för att skapa en pipeline med hjälp av Azure PowerShell- och JSON-definitioner finns i självstudie: skapa en datafabrik med hjälp av Azure PowerShell.

Pipeline med tills-aktivitet

I det här exemplet har pipelinen två aktiviteter: Tills och Vänta. Vänta-aktiviteten väntar under den angivna tidsperioden innan webbaktiviteten körs i loopen. Mer information om uttryck och funktioner finns i Uttrycksspråk och funktioner.

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

Exempel 2

Pipelinen i det här exemplet kopierar data från en indatamapp till en utdatamapp i en loop. Loopen avslutas när värdet för upprepningsparametern är inställt på false eller tidsgränsen uppnås efter en minut.

Pipeline med until-aktivitet (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"
            }                        
        }        
    }
}

Länkad Azure Storage-tjänst (AzureStorageLinkedService.json)

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

Parameteriserad Azure Blob-datauppsättning (BlobDataset.json)

Pipelinen anger folderPath till värdet för parametern outputPath1 eller outputPath2 i pipelinen.

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

Pipelineparametern JSON (PipelineParameters.json)

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

PowerShell-kommandon

Kommentar

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Dessa kommandon förutsätter att du har sparat JSON-filerna i mappen: 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
}

Se andra kontrollflödesaktiviteter som stöds: