Fino all'attività in Azure Data Factory e Synapse Analytics

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Suggerimento

Provare Data Factory in Microsoft Fabric, una soluzione di analisi completa per le aziende. Microsoft Fabric copre tutti gli elementi, dallo spostamento dei dati all'analisi scientifica dei dati, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Scopri come avviare gratuitamente una nuova versione di valutazione .

L'attività Until svolge la stessa funzione della struttura di ciclo do-until nei linguaggi di programmazione. Esegue infatti un set di attività in un ciclo finché la condizione associata con l'attività restituisce true. Se un'attività interna ha esito negativo, l'attività Until non viene interrotta. È possibile specificare un valore di timeout per l'attività until.

Creare un'attività Until con l'interfaccia utente

Per usare un'attività Until in una pipeline, completare la procedura seguente:

  1. Cercare Until nel riquadro Attività pipeline e trascinare un'attività Until nell'area di disegno della pipeline.

  2. Selezionare l'attività Until nell'area di disegno se non è già selezionata e la scheda Impostazioni per modificarne i dettagli.

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

  3. Immettere un'espressione che verrà valutata dopo l'esecuzione di tutte le attività figlio definite nell'attività Until. Se l'espressione restituisce false, l'attività Until eseguirà di nuovo tutte le attività figlio. Quando restituisce true, l'attività Until verrà completata. L'espressione può essere un'espressione stringa letterale o qualsiasi combinazione di espressioni dinamiche , funzioni, variabili di sistema o output di altre attività. L'esempio seguente controlla il valore di una variabile di matrice di pipeline definita in precedenza denominata TestVariable per verificare se restituisce ['done'].

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

  4. Definire le attività eseguite dall'attività Until selezionando il pulsante Modifica attività direttamente nell'attività Until oppure selezionando la scheda Attività per selezionarla. Verrà visualizzato un nuovo riquadro dell'editor di attività in cui è possibile aggiungere qualsiasi attività per l'attività Until da eseguire. In questo esempio, un'attività Imposta variabile imposta semplicemente il valore della variabile a cui si fa riferimento nell'espressione precedente su ['done'], quindi l'espressione dell'attività Until sarà true la prima volta che viene eseguita e l'attività Until verrà interrotta. Nell'uso reale, è possibile controllare le condizioni necessarie e l'attività Until continuerà a eseguire le attività figlio ogni volta che l'espressione viene valutata, fino a quando non vengono soddisfatte le condizioni.

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

Sintassi

{
    "type": "Until",
    "typeProperties": {
        "expression":  {
            "value":  "<expression that evaluates to true or false>", 
            "type": "Expression"
        },
        "timeout": "<time out for the loop. for example: 00:01:00 (1 minute)>",
        "activities": [
            {
                "<Activity 1 definition>"
            },
            {
                "<Activity 2 definition>"
            },
            {
                "<Activity N definition>"
            }
        ]
    },
    "name": "MyUntilActivity"
}

Proprietà del tipo

Proprietà Descrizione Valori consentiti Obbligatoria
name Nome dell'attività Until. String
type Deve essere impostata su Until. String
expression Espressione che deve restituire true o false Espressione.
timeout Il ciclo do-until raggiunge il timeout allo scadere del tempo specificato qui. String. d.hh:mm:ss(o) hh:mm:ss. Il valore predefinito è 7 giorni. Il valore massimo è 90 giorni. No
Attività Set di attività che vengono eseguite fino a quando l'espressione restituisce true. Matrice di attività.

Esempio 1

Nota

Questa sezione include le definizioni JSON e i comandi di PowerShell di esempio per eseguire la pipeline. Per una procedura dettagliata con istruzioni dettagliate per creare una pipeline usando Azure PowerShell e le definizioni JSON, vedere Esercitazione: Creare una data factory usando Azure PowerShell.

Pipeline con attività Until

In questo esempio nella pipeline sono presenti due attività: Until e Wait. L'attività Wait attende per il periodo di tempo specificato prima di eseguire l'attività Web nel ciclo. Per informazioni su espressioni e funzioni, vedere Linguaggio e funzioni delle espressioni.

{
    "name": "DoUntilPipeline",
    "properties": {
        "activities": [
            {
                "type": "Until",
                "typeProperties": {
                    "expression": {
                        "value": "@equals('Failed', coalesce(body('MyUnauthenticatedActivity')?.status, actions('MyUnauthenticatedActivity')?.status, 'null'))",
                        "type": "Expression"
                    },
                    "timeout": "00:00:01",
                    "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"
            }
        ]
    }
}

Esempio 2

La pipeline in questo esempio copia i dati da una cartella di input a una cartella di output in un ciclo. Il ciclo termina quando il valore del parametro repeat è impostato su false oppure quando raggiunge il timeout, dopo un minuto.

Pipeline con attività Until (Adfv2QuickStartPipeline.json)

{
    "name": "Adfv2QuickStartPipeline",
    "properties": {
        "activities": [
            {
                "type": "Until",
                "typeProperties": {
                    "expression":  {
                        "value":  "@equals('false', pipeline().parameters.repeat)", 
                        "type": "Expression"
                    },
                    "timeout": "00:01: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"
            }                        
        }        
    }
}

Servizio collegato di Archiviazione di Azure (AzureStorageLinkedService.json)

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

Set di dati BLOB di Azure con parametri (BlobDataset.json)

La pipeline imposta folderPath sul valore del parametro outputPath1 o outputPath2 della pipeline.

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

JSON dei parametri della pipeline (PipelineParameters.json)

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

Comandi di PowerShell

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Questi comandi presuppongono che i file JSON siano stati salvati nella cartella 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
}

Vedere altre attività del flusso di controllo supportate: