Udostępnij za pośrednictwem


Do czasu działania w usługach Azure Data Factory i Synapse Analytics

DOTYCZY: Azure Data Factory Azure Synapse Analytics

Napiwek

Wypróbuj usługę Data Factory w usłudze Microsoft Fabric — rozwiązanie analityczne typu all-in-one dla przedsiębiorstw. Usługa Microsoft Fabric obejmuje wszystko, od przenoszenia danych do nauki o danych, analizy w czasie rzeczywistym, analizy biznesowej i raportowania. Dowiedz się, jak bezpłatnie rozpocząć nową wersję próbną !

Działanie Until udostępnia te same funkcje, co struktura pętli do-until w językach programowania. Służy do wykonywania zestawu działań w pętli do momentu, gdy warunek skojarzony z działaniem zostanie obliczony na wartość true. Jeśli działanie wewnętrzne zakończy się niepowodzeniem, działanie Until nie zostanie zatrzymane. Możesz określić wartość limitu czasu dla działania until.

Tworzenie działania Until za pomocą interfejsu użytkownika

Aby użyć działania Until w potoku, wykonaj następujące kroki:

  1. Wyszukaj ciąg Until w okienku Działania potoku i przeciągnij działanie Until na kanwę potoku.

  2. Wybierz akcję Until w obszarze roboczym, jeśli nie została jeszcze wybrana, oraz jej kartę Ustawienia, aby edytować jej szczegóły.

    Pokazuje kartę Ustawienia działania Until na kanwie potoku.

  3. Wprowadź wyrażenie, które będzie oceniane po wykonaniu wszystkich działań podrzędnych zdefiniowanych w działaniu Until. Jeśli wyrażenie zwraca wartość false, działanie typu Until ponownie wykonuje wszystkie swoje działania podrzędne. Gdy zostanie obliczona wartość true, działanie Until zostanie ukończone. Wyrażenie może być wyrażeniem ciągu literału lub dowolną kombinacją wyrażeń dynamicznych , funkcji, zmiennych systemowych lub danych wyjściowych z innych działań. Poniższy przykład sprawdza wartość wcześniej zdefiniowanej zmiennej tablicy potoku o nazwie TestVariable, aby sprawdzić, czy daje ona wartość ['done'].

    Pokazuje panel Dodaj zawartość dynamiczną z wyrażeniem w celu sprawdzenia, czy zmienna ma zdefiniowaną wartość.

  4. Zdefiniuj działania wykonywane przez działanie Until, wybierając przycisk Edytuj działania bezpośrednio w działaniu Until lub wybierając kartę Działania, aby ją tam wybrać. Zostanie wyświetlone nowe okienko edytora działań, w którym można dodać dowolne działania do wykonania w ramach działania Until. W tym przykładzie działanie Ustaw zmienną ustawia wartość zmiennej, do której się odnosi, na "done". Dlatego wyrażenie Until będzie prawdziwe podczas pierwszego wykonania, a następnie aktywność Until zostanie zatrzymana. Możesz użyć podobnych zmiennych, aby sprawdzić dowolne warunki. Działanie Until wykonuje swoje działania podrzędne za każdym razem, gdy wyrażenie jest oceniane, dopóki warunki nie zostaną spełnione. Jeśli przechodzisz przez wiele działań, może wystąpić potencjalne opóźnienie przy wychodzeniu z pętli z powodu pracy związanej z agregacją i oczyszczaniem, wykonywanej przez potok.

    Przedstawia edytor czynności dla czynności Until z określoną czynnością Ustaw zmienną.

Składnia

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

Właściwości typu

Własność opis Dozwolone wartości Wymagane
nazwa Until Nazwa działania. String Tak
typ Musi być ustawiona na Wartość Do. String Tak
wyrażenie Wyrażenie, które musi mieć wartość true lub false Wyrażenie. Tak
przerwa czasowa Pętla do-until kończy się po upływie określonego czasu. Struna. d.hh:mm:ss (lub) hh:mm:ss. Wartość domyślna to siedem dni. Wartość maksymalna to: 90 dni. Nie.
Działania Zestaw czynności wykonywanych, dopóki wyrażenie nie spełnia warunku true. Zbiór działań. Tak

Przykład 1

Uwaga

Ta sekcja zawiera definicje JSON i przykładowe polecenia programu PowerShell służące do uruchamiania potoku. Aby zapoznać się z instrukcjami krok po kroku dotyczącymi tworzenia potoku przy użyciu programu Azure PowerShell i definicji JSON, zobacz samouczek: tworzenie fabryki danych przy użyciu programu Azure PowerShell.

Potok z działaniem Until

W tym przykładzie przepływ ma dwie aktywności: Until i Zaczekaj. Działanie Wait czeka na określony okres czasu przed uruchomieniem działania internetowego w pętli. Aby dowiedzieć się więcej o wyrażeniach i funkcjach, zobacz Język i funkcje wyrażeń.

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

Przykład 2

Potok danych w tym przykładzie, który kopiuje dane z folderu wejściowego do folderu wyjściowego w pętli. Pętla kończy się, gdy wartość parametru powtórzenia jest ustawiona na false lub gdy upłynie jedna minuta.

Potok z działaniem 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"
            }                        
        }        
    }
}

Połączona usługa Azure Storage (AzureStorageLinkedService.json)

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

Sparametryzowany zestaw danych obiektów blob platformy Azure (BlobDataset.json)

Potok ustawia parametr folderPath na wartość parametru outputPath1 lub outputPath2 potoku.

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

Kod JSON parametru rurociągu (PipelineParameters.json)

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

Komendy PowerShell

Uwaga

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Te polecenia zakładają, że pliki JSON zostały zapisane w folderze: 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
}

Zobacz inne obsługiwane działania przepływu sterowania: