Aktivita Until ve službě Azure Data Factory a Synapse Analytics

PLATÍ PRO: Azure Data Factory Azure Synapse Analytics

Tip

Vyzkoušejte si službu Data Factory v Microsoft Fabric, řešení pro analýzy typu all-in-one pro podniky. Microsoft Fabric zahrnuje všechno od přesunu dat až po datové vědy, analýzy v reálném čase, business intelligence a vytváření sestav. Přečtěte si, jak začít používat novou zkušební verzi zdarma.

Aktivita Until funguje stejně jako smyčka Do-Until v programovacích jazycích. Provádí ve smyčce sadu aktivit, dokud se podmínka přidružená k aktivitě nevyhodnotí jako pravdivá. Pokud vnitřní aktivita selže, aktivita Until se nezastaví. Můžete zadat hodnotu časového limitu pro aktivitu do té doby.

Vytvoření aktivity Until s uživatelským rozhraním

Pokud chcete v kanálu použít aktivitu Until, proveďte následující kroky:

  1. Vyhledejte v podokně Aktivity kanálu a přetáhněte aktivitu Until na plátno kanálu.

  2. Vyberte aktivitu Until na plátně, pokud ještě není vybraná, a její Nastavení kartu, abyste mohli upravit podrobnosti.

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

  3. Zadejte výraz, který se vyhodnotí po všech podřízených aktivitách definovaných v aktivitě Until. Pokud se výraz vyhodnotí jako nepravda, aktivita Until znovu provede všechny jeho podřízené aktivity. Když se vyhodnotí jako true, aktivita Until se dokončí. Výrazem může být literálový řetězcový výraz nebo libovolná kombinace dynamických výrazů, funkcí, systémových proměnných nebo výstupů z jiných aktivit. Následující příklad zkontroluje hodnotu dříve definované proměnné pole kanálu s názvem TestVariable a zjistí, jestli se vyhodnotí jako ['done'].

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

  4. Definujte aktivity, které aktivita Until spustí, výběrem tlačítka Upravit aktivity přímo na aktivitě Until nebo výběrem karty Aktivity ji tam vyberte. Zobrazí se nové podokno editoru aktivit, kde můžete přidat jakékoli aktivity pro aktivitu Until, která se má provést. V tomto příkladu aktivita Nastavit proměnnou jednoduše nastaví hodnotu proměnné odkazované ve výše uvedeném výrazu na ['done'], takže výraz Until aktivity bude pravdivý při prvním spuštění a aktivita Until se zastaví. V reálném světě můžete zkontrolovat všechny požadované podmínky a aktivita Until bude pokračovat v provádění podřízených aktivit při každém vyhodnocení výrazu, dokud nebudou splněny podmínky.

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

Vlastnosti typu

Vlastnost Popis Povolené hodnoty Požaduje se
name Until Název aktivity. String Ano
type Musí být nastavena na Hodnotu Until. String Ano
výraz Výraz, který musí být vyhodnocen jako true nebo false Výraz. Ano
timeout Po uplynutí zadaného času vyprší časový limit smyčky do-until. Řetězec. d.hh:mm:ss nebo ) hh:mm:ss. Výchozí hodnota je sedm dní. Maximální hodnota je: 90 dní. No
Aktivity Sada aktivit, které se provádějí, dokud se výraz nehodnotí jako true. Pole aktivit. Ano

Příklad 1

Poznámka:

Tato část obsahuje definice JSON a ukázkové příkazy PowerShellu pro spuštění kanálu. Návod s podrobnými pokyny k vytvoření kanálu pomocí Azure PowerShellu a definic JSON najdete v kurzu: Vytvoření datové továrny pomocí Azure PowerShellu.

Kanál s aktivitou Until

V tomto příkladu má kanál dvě aktivity: Do aWait. Aktivita Wait čeká na zadanou dobu před spuštěním webové aktivity ve smyčce. Další informace o výrazech a funkcích najdete v tématu Jazyk a funkce výrazů.

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

Příklad 2

Kanál v této ukázce kopíruje data ze vstupní složky do výstupní složky ve smyčce. Smyčka se ukončí, když je hodnota parametru repeat nastavena na false nebo vyprší časový limit po jedné minutě.

Kanál s aktivitou 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"
            }                        
        }        
    }
}

Propojená služba Azure Storage (AzureStorageLinkedService.json)

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

Parametrizovaná datová sada azure blob (BlobDataset.json)

Kanál nastaví cestu ke složce na hodnotu outputPath1 nebo outputPath2 parametru kanálu.

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

JSON parametru kanálu (PipelineParameters.json)

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

Příkazy prostředí PowerShell

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Začněte tím, že si projdete téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Tyto příkazy předpokládají, že jste uložili soubory JSON do složky: 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
}

Projděte si další podporované aktivity toku řízení: