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 all-in-one per le aziende. Microsoft Fabric copre tutto, dallo spostamento dati al data science, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Vedere le informazioni su come iniziare una nuova prova gratuita!

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 si arresta. È 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.

    Mostra la scheda Impostazioni dell'attività Until nell'area di disegno della pipeline.

  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 esegue di nuovo tutte le attività figlio. Quando restituisce true, l'attività Until viene 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'].

    Mostra il   Aggiungi contenuto dinamico  riquadro con un'espressione per controllare una variabile per un valore definito.

  4. Definire le attività eseguite dall'attività Until selezionando il pulsante Modifica attività direttamente nell'attività Until oppure selezionando la scheda Attività per selezionarla. Viene 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 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.

    Mostra l'editor di attività per un'attività Until con un'attività Imposta variabile definita.

Sintassi

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

Proprietà del tipo

Proprietà Descrizione Valori consentiti Obbligatoria
name Nome dell'attività Until. Stringa
type Deve essere impostata su Until. Stringa
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 è sette 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: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"
            }
        ]
    }
}

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

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: