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:
Busque Until en el panel Actividades de canalización y arrastre una actividad Until al lienzo de canalización.
Seleccione la actividad Until en el lienzo si aún no está seleccionada y su pestaña Configuración para editar sus detalles.
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"].
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.
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 | Sí |
type | Debe establecerse en Until. | String | Sí |
expresión | Expresión que debe evaluarse como "true" o "false" | Expresión. | Sí |
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
}
Contenido relacionado
Vea otras actividades de flujo de control admitidas: