Compartir a través de


Actividad Until en Azure Data Factory y Azure Synapse Analytics

SE APLICA A: Azure Data Factory Azure Synapse Analytics

Sugerencia

Pruebe Data Factory en Microsoft Fabric, una solución de análisis todo en uno para empresas. Microsoft Fabric abarca todo, desde el movimiento de datos hasta la ciencia de datos, el análisis en tiempo real, la inteligencia empresarial y los informes. ¡Obtenga más información sobre cómo iniciar una nueva evaluación gratuita!

La actividad Until proporciona la misma funcionalidad que una estructura de bucle Do-Until en lenguajes de programación. Ejecuta un conjunto de actividades en un bucle hasta que la condición asociada a la actividad la evalúa como "true". Si se produce un error en una actividad interna, la actividad Until no se detiene. Puede especificar un valor de tiempo de espera para la actividad Until.

Creación de una actividad Until con una interfaz de usuario

Para usar una actividad Until en una canalización, realice los pasos siguientes:

  1. Busque Until en el panel Actividades de canalización y arrastre una actividad Until al lienzo de canalización.

  2. Seleccione la actividad Until en el lienzo si aún no está seleccionada y su pestaña Configuración para editar sus detalles.

    Muestra la pestaña Configuración de la actividad Until en el lienzo de la canalización.

  3. Escriba una expresión que se evaluará una vez que se ejecuten todas las actividades secundarias definidas en la actividad Until. Si la expresión se evalúa como false, la actividad Until ejecuta de nuevo todas sus actividades secundarias. Si se evalúa como true, la actividad Until finaliza. La expresión puede ser una expresión de cadena literal o cualquier combinación de expresiones y funciones dinámicas, variables del sistema o salidas de otras actividades. En el ejemplo siguiente se comprueba el valor de una variable de matriz de canalización definida previamente denominada TestVariable para ver si se evalúa como ["done"].

    Muestra el panel  Agregar contenido dinámico  con una expresión para comprobar si una variable tiene un valor definido.

  4. Para definir las actividades que la actividad Until ejecutará, seleccione el botón Editar actividades en la actividad Until directamente, o bien seleccione la pestaña Actividades para definirlas allí. Se muestra un nuevo panel del editor de actividades en el que puede agregar cualquier actividad para que la actividad Until la ejecute. En este ejemplo, una actividad Establecer variable simplemente establece el valor de la variable a la que se hace referencia en la expresión anterior en ["done"], por lo que la expresión de la actividad Until será true la primera vez que se ejecute y la actividad Until se detendrá. En su uso real, puede comprobar las condiciones que necesite y la actividad Until seguirá ejecutando sus actividades secundarias cada vez que se evalúe la expresión, hasta que se cumplan las condiciones.

    Muestra el editor de actividades de una actividad Until con una actividad Establecer variable definida.

Sintaxis

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

Propiedades de tipo

Propiedad Descripción Valores permitidos Obligatorio
name Nombre de la actividad Until. String
type Debe establecerse en Until. String
expresión Expresión que debe evaluarse como "true" o "false" Expresión.
timeout El tiempo de espera del bucle Do-Until se agota transcurrido el tiempo especificado aquí. String. d.hh:mm:ss (o) hh:mm:ss. El valor predeterminado es de siete días. El valor máximo es 90 días. No
Actividades Conjunto de actividades que se ejecutan hasta que la expresión se evalúa como true. Matriz de actividades. Yes

Ejemplo 1

Nota

En esta sección se proporcionan definiciones JSON y comandos de PowerShell de ejemplo para ejecutarlos en la canalización. Para ver una guía con instrucciones paso a paso para crear una canalización con definiciones de JSON y Azure PowerShell, consulte Tutorial: Creación de una factoría de datos mediante Azure PowerShell.

Canalización con actividad Until

En este ejemplo, la canalización tiene dos actividades: Until y Wait. La actividad Wait espera durante el período de tiempo especificado antes de ejecutar la actividad Web en el bucle. Para obtener más información sobre las expresiones y funciones, consulte Lenguaje de expresiones y funciones.

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

Ejemplo 2

La canalización de esta muestra copia los datos de una carpeta de entrada a una carpeta de salida en un bucle. El bucle finaliza cuando el valor del parámetro repeat está establecido en "false" o se agota el tiempo de espera transcurrido un minuto.

Canalización con actividad 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"
            }                        
        }        
    }
}

Servicio vinculado de Azure Storage (AzureStorageLinkedService.json)

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

Conjunto de datos de blob de Azure con parámetros (BlobDataset.json)

La canalización establece folderPath en el valor de los parámetros outputPath1 o outputPath2 de la canalización.

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

Parámetro de canalización JSON (PipelineParameters.json)

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

Comandos de PowerShell

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para empezar, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Estos comandos presuponen que ha guardado los archivos JSON en la siguiente carpeta: 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
}

Vea otras actividades de flujo de control admitidas: