Comparteix via


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 integral 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 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 se 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  Añadir contenido dinámico  con una expresión para comprobar una variable de 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 Set Variable establece el valor de la variable a la que se hace referencia en "done". Por lo tanto, la expresión de la actividad Until será verdadera la primera vez que se ejecute y, a continuación, la actividad Until se detendrá. Puede usar variables similares para comprobar las condiciones. La actividad Until ejecuta sus subactividades cada vez que se evalúa la expresión, hasta que se cumplen las condiciones. Si recorre en iteración varias actividades, existe un posible retraso en la salida del bucle debido al trabajo de agregación y limpieza realizado por la canalización.

    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.

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 de PowerShell de Azure Az para interactuar con Azure. Para comenzar, consulte Instalar Azure PowerShell. Para obtener más información sobre cómo migrar al módulo Az de PowerShell, consulte Migrar Azure PowerShell de AzureRM a Az.

Estos comandos suponen que guardó los archivos JSON en la 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
}

Consulte otras actividades de flujo de control admitidas: