Až do aktivity v Azure Data Factory a Synapse Analytics

VZTAHUJE SE NA: Azure Data Factory Azure Synapse Analytics

Tip

Pro ekvivalentní aktivitu v Data Factory v Microsoft Fabric viz aktivita Twith.

Aktivita Until poskytuje stejné funkce jako struktura smyčky 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

Chcete-li v potrubí použít aktivitu Until, proveďte následující kroky:

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

  2. Vyberte na plátně aktivitu Until, pokud již není vybraná, a otevřete její kartu Nastavení pro úpravu podrobností.

    Zobrazuje kartu Nastavení aktivity Until na plátně potrubí.

  3. Zadejte výraz, který se vyhodnotí poté, co jsou provedeny všechny podřízené aktivity definované v aktivitě Until. Pokud se výraz vyhodnotí jako false, aktivita Until znovu provede všechny své 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'].

    Zobrazuje podokno  Přidat dynamický obsah  s výrazem pro kontrolu, zda proměnná má definovanou hodnotu.

  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 pro nastavení proměnné nastaví hodnotu u odkazované proměnné na "hotovo". Výraz aktivity Until bude tedy pravdivý při prvním spuštění a potom se aktivita Until zastaví. Podobné proměnné můžete použít ke kontrole jakýchkoli podmínek. Aktivita Until provádí své podřízené aktivity při každém vyhodnocení výrazu, dokud nejsou splněny podmínky. Pokud iterujete více aktivit, může dojít ke zpoždění ukončení smyčky kvůli agregaci a vyčištění práce prováděné kanálem.

    Zobrazuje editor aktivit pro aktivitu Until s definovanou aktivitou Nastavit proměnnou.

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

Vlastnosti typu

Vlastnost Popis Povolené hodnoty Povinné
název Until Název aktivity. String Yes
typ Musí být nastavena na Until. String Yes
výraz Výraz, který musí být vyhodnocen jako true nebo false Výraz Yes
časový limit 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í. Ne
Aktivity Sada aktivit, které se provádějí, dokud se výraz nehodnotí jako true. Pole činností. Yes

Příklad 1

Poznámka

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

Datový tok s aktivitou Until

V tomto příkladu má datový kanál dvě aktivity: Until a Wait. 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

Potrubí v této ukázce kopíruje data ze vstupní složky do výstupní složky cyklicky. 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 objektů blob Azure (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 potrubí (PipelineParameters.json)

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

Příkazy PowerShellu

Poznámka

K interakci s Azure doporučujeme použít modul Azure Az PowerShell. Pokud chcete začít, přečtěte si téma Install Azure PowerShell. Informace o migraci do modulu Az PowerShell najdete v tématu Migrace Azure PowerShell z AzureRM do 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í: