Creación de un desencadenador que ejecuta una canalización en una ventana de saltos de tamaño constante
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 información sobre cómo iniciar una nueva evaluación gratuita.
En este artículo se explica cómo crear, iniciar y supervisar un desencadenador de ventana de saltos de tamaño constante. Para obtener información general sobre los desencadenadores y los tipos compatibles, vea Ejecución y desencadenadores de canalización.
Los desencadenadores de ventana de saltos de tamaño constante son un tipo de desencadenador que se activa en un intervalo de tiempo periódico a partir de una hora de inicio especificada, mientras conserva el estado. Las ventanas de saltos de tamaño constante son una serie de intervalos de tiempo de tamaño fijo, contiguos y que no se superponen. Un desencadenador de ventana de saltos de tamaño constante tiene una relación uno a uno con una canalización y solo puede hacer referencia a una única canalización.
Un desencadenador periódico es una alternativa más robusta a un desencadenador programado. Ofrece un conjunto de características para escenarios complejos (como dependencia de otros desencadenadores periódicos, , repetición de la ejecución de un trabajo con errores y establecimiento del reintento de usuarios para canalizaciones). Para comprender mejor la diferencia entre un desencadenador programado y un desencadenador periódico, consulte Comparación de tipos de desencadenadores.
Experiencia del portal de Azure Data Factory y Azure Synapse
- Para crear un desencadenador periódico en Azure Portal, seleccione la pestaña de los desencadenadores y, a continuación, seleccione Nuevo.
- Una vez que se abra el panel de configuración del desencadenador, seleccione Ventana de saltos de tamaño constante. A continuación, defina las propiedades del desencadenador periódico.
- Cuando haya terminado, seleccione Guardar.
Propiedades del tipo de desencadenador de ventana de saltos de tamaño constante
Una ventana de saltos de tamaño constante tiene las siguientes propiedades del tipo de desencadenador:
{
"name": "MyTriggerName",
"properties": {
"type": "TumblingWindowTrigger",
"runtimeState": "<<Started/Stopped/Disabled - readonly>>",
"typeProperties": {
"frequency": <<Minute/Hour>>,
"interval": <<int>>,
"startTime": "<<datetime>>",
"endTime": <<datetime - optional>>,
"delay": <<timespan - optional>>,
"maxConcurrency": <<int>> (required, max allowed: 50),
"retryPolicy": {
"count": <<int - optional, default: 0>>,
"intervalInSeconds": <<int>>,
},
"dependsOn": [
{
"type": "TumblingWindowTriggerDependencyReference",
"size": <<timespan - optional>>,
"offset": <<timespan - optional>>,
"referenceTrigger": {
"referenceName": "MyTumblingWindowDependency1",
"type": "TriggerReference"
}
},
{
"type": "SelfDependencyTumblingWindowTriggerReference",
"size": <<timespan - optional>>,
"offset": <<timespan>>
}
]
},
"pipeline": {
"pipelineReference": {
"type": "PipelineReference",
"referenceName": "MyPipelineName"
},
"parameters": {
"parameter1": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
},
"parameter2": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
},
"parameter3": "https://mydemo.azurewebsites.net/api/demoapi"
}
}
}
}
En la tabla siguiente se muestra una descripción general de los elementos JSON más importantes relacionados con la periodicidad y la programación de un desencadenador periódico.
Elemento JSON | Descripción | Tipo | Valores permitidos | Obligatorio |
---|---|---|---|---|
type |
El tipo del desencadenador. type es el valor fijo TumblingWindowTrigger . |
String |
TumblingWindowTrigger |
Sí |
runtimeState |
Estado actual del tiempo de ejecución del desencadenador. Este elemento es <readOnly>. |
String |
Started , Stopped , Disabled |
Sí |
frequency |
Una cadena que representa la unidad de frecuencia (minutos, horas o meses) con que se repite el desencadenador. Si los valores de fecha startTime son más granulares que el valor frequency , las fechas startTime se consideran cuando se calculan los límites de la ventana. Por ejemplo, si el valor de frequency es hourly y el valor de startTime es 2017-09-01T10:10:10Z, la primera ventana es (2017-09-01T10:10:10Z, 2017-09-01T11:10:10Z). |
String |
Minute , Hour , Month |
Sí |
interval |
Entero positivo que denota el intervalo del valor frequency , que determina la frecuencia con la que se ejecuta el desencadenador. Por ejemplo, si interval es 3 y frequency es hour , el desencadenador se repite cada 3 horas. El intervalo de ventana mínimo es de 5 minutos. |
Integer |
Un número entero positivo. | Sí |
startTime |
La primera repetición, que puede ser en el pasado. El primer intervalo del desencadenador es (startTime , startTime + interval ). |
DateTime |
Valor DateTime . |
Sí |
endTime |
La última repetición, que puede ser en el pasado. | DateTime |
Valor DateTime . |
Sí |
delay |
La cantidad de tiempo para retrasar el inicio del procesamiento de datos de la ventana. La ejecución de la canalización se inicia después del tiempo de ejecución esperado más el tiempo de retraso establecido en delay. delay define el tiempo de espera del desencadenador antes de desencadenar una nueva ejecución. El retraso no altera la ventana startTime . Por ejemplo, un valor de delay de 00:10:00 implica un retraso de 10 minutos. |
Timespan (hh:mm:ss) |
Un valor de timespan donde el valor predeterminado es 00:00:00 . |
No |
maxConcurrency |
Número de ejecuciones simultáneas del desencadenador que se activan para las ventanas que están listas. Por ejemplo, reponer las ejecuciones cada hora para el día de ayer genera 24 ventanas. Si maxConcurrency = 10, los eventos del desencadenador se activan solo para las 10 primeras ventanas (00:00-01:00 - 09:00-10:00). Una vez completadas las diez primeras ejecuciones de canalización desencadenadas, se activan las ejecuciones del desencadenador para las diez siguientes (10:00-11:00 - 19:00-20:00). Siguiendo con el ejemplo de maxConcurrency = 10, si hay 10 ventanas listas, habrá también 10 ejecuciones de canalizaciones en total. Si solo hay una ventana lista, solo se ejecuta una canalización. |
Integer |
Un número entero comprendido entre uno y cincuenta. | Sí |
retryPolicy: Count |
El número de reintentos antes de que la ejecución de la canalización se marca como Failed . |
Integer |
Un entero, donde el valor predeterminado es 0 (ningún reintento). | No |
retryPolicy: intervalInSeconds |
El retraso entre intentos de reintentos, especificado en segundos. | Integer |
El número de segundos, donde el valor predeterminado es 30. El valor mínimo es 30 . |
No |
dependsOn: type |
Tipo de TumblingWindowTriggerReference . Obligatorio si se establece una dependencia. |
String |
TumblingWindowTriggerDependencyReference , SelfDependencyTumblingWindowTriggerReference |
No |
dependsOn: size |
Tamaño de la ventana de saltos de tamaño constante de la dependencia. | Timespan (hh:mm:ss) |
Un valor de timespan positivo en el que el valor predeterminado es el tamaño de la ventana del desencadenador secundario. |
No |
dependsOn: offset |
Desplazamiento del desencadenador de la dependencia. | Timespan (hh:mm:ss) |
Un valor de timespan que debe ser negativo en una autodependencia. Si no se especifica ningún valor, la ventana es la misma que el desencadenador. |
Autodependencia: Sí Otros: No |
Nota:
Después de publicar un desencadenador periódico, los valores interval
y frequency
no se pueden editar.
Variables del sistema WindowStart y WindowEnd
Puede usar las variables del sistema WindowStart
y WindowEnd
del desencadenador periódico en la definición de canalización (es decir, para parte de una consulta). Pase las variables del sistema como parámetros a la canalización en la definición de trigger. En el ejemplo siguiente se muestra cómo pasar estas variables como parámetros.
{
"name": "MyTriggerName",
"properties": {
"type": "TumblingWindowTrigger",
...
"pipeline": {
"pipelineReference": {
"type": "PipelineReference",
"referenceName": "MyPipelineName"
},
"parameters": {
"MyWindowStart": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
},
"MyWindowEnd": {
"type": "Expression",
"value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
}
}
}
}
}
Para usar los valores de variable del sistema WindowStart
y WindowEnd
en la definición de canalización, use los parámetros MyWindowStart
y MyWindowEnd
en consecuencia.
Orden de ejecución de ventanas en un escenario de reposición
Si valor de startTime
del desencadenador se encuentra en el pasado, en función de esta fórmula, M=(CurrentTime- TriggerStartTime)/TumblingWindowSize, el desencadenador generará {M} ejecuciones de reposición (pasadas) en paralelo, respetando la simultaneidad del desencadenador, antes de llevar a cabo las ejecuciones futuras. El orden de ejecución de las ventanas es determinista, de los intervalos más antiguos a los más recientes. Actualmente, no se puede modificar este comportamiento.
Nota:
En este escenario, todas las ejecuciones del valor de startTime
seleccionado se ejecutan antes de ejecutar las futuras ejecuciones. Si necesita reponer un largo período de tiempo, se recomienda realizar una carga histórica inicial.
Elementos TriggerResource existentes
Los puntos siguientes se aplican a la actualización de los elementos TriggerResource
existentes:
- El valor del elemento
frequency
(o tamaño de ventana) del desencadenador junto con el elementointerval
no se puede cambiar después de crear el desencadenador. Esta restricción es necesaria para el correcto funcionamiento de las nuevas ejecuciones detriggerRun
y las evaluaciones de dependencias. - Si el valor del elemento
endTime
del desencadenador cambia (se agrega o se actualiza), no se restablece el estado de las ventanas que ya se han procesado. El desencadenador respeta el nuevo valor deendTime
. Si el nuevo valor deendTime
es anterior a las ventanas que ya se han ejecutado, el desencadenador se detiene. En caso contrario, el desencadenador se detiene cuando se encuentra el nuevo valor deendTime
.
Reintentos de canalizaciones asignados por el usuario
En caso de errores de canalización, un desencadenador periódico puede volver a intentar la ejecución de la canalización a la que se hace referencia automáticamente, utilizando los mismos parámetros de entrada, sin la intervención del usuario. Use la propiedad retryPolicy
de la definición del desencadenador para especificar esta acción.
Dependencia de un desencadenador de ventana de saltos de tamaño constante
Si quiere asegurarse de que un desencadenador de ventana de saltos de tamaño constante se ejecute solo después de la correcta ejecución de otro desencadenador de ventana de saltos de tamaño constante en la factoría de datos, cree una dependencia de desencadenador de ventana de saltos de tamaño constante.
Cancelación de la ejecución de la ventana de saltos de tamaño constante
Puede cancelar las ejecuciones de un desencadenador periódico si la ventana específica está en estado En espera, En espera de dependencia o En ejecución:
- Si la ventana se encuentra en estado En ejecución, cancele la ejecución de canalización asociada y la ejecución del desencadenador se marca como Cancelado.
- Si la ventana está en estado En espera o A la espera de dependencia, puede cancelar la ventana desde Supervisión.
También puede volver a ejecutar una ventana cancelada. La repetición de la ejecución toma las definiciones publicadas más recientes del desencadenador. Las dependencias de la ventana especificada se vuelven a evaluar tras volver a ejecutarse.
Ejemplo de Azure PowerShell y la CLI de Azure
En esta sección se muestra cómo usar Azure PowerShell para crear, iniciar y supervisar un desencadenador.
Nota:
Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para comenzar, 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.
Requisitos previos
- Suscripción de Azure: si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
- Azure PowerShell: siga las instrucciones que se indican en Instalación de Azure PowerShell en Windows con PowerShellGet.
- Azure Data Factory: siga las instrucciones que se indican en Creación de una instancia de Azure Data Factory mediante PowerShell para crear una factoría de datos y una canalización.
Código de ejemplo
Cree un archivo JSON llamado MyTrigger.json en la carpeta C:\ADFv2QuickStartPSH\ con el siguiente contenido:
Importante
Antes de guardar el archivo JSON, establezca el valor del elemento
startTime
en la hora universal coordinada (UTC) actual. Establezca el valor del elementoendTime
en una hora más allá de la hora UTC actual.{ "name": "PerfTWTrigger", "properties": { "type": "TumblingWindowTrigger", "typeProperties": { "frequency": "Minute", "interval": "15", "startTime": "2017-09-08T05:30:00Z", "endTime" : "2017-09-08T06:30:00Z", "delay": "00:00:01", "retryPolicy": { "count": 2, "intervalInSeconds": 30 }, "maxConcurrency": 50 }, "pipeline": { "pipelineReference": { "type": "PipelineReference", "referenceName": "DynamicsToBlobPerfPipeline" }, "parameters": { "windowStart": "@trigger().outputs.windowStartTime", "windowEnd": "@trigger().outputs.windowEndTime" } }, "runtimeState": "Started" } }
Cree un desencadenador mediante el cmdlet Set-AzDataFactoryV2Trigger:
Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
Confirme que el estado del desencadenador es Detenido mediante el cmdlet Get-AzDataFactoryV2Trigger:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Inicie el desencadenador mediante el cmdlet Start-AzDataFactoryV2Trigger:
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Confirme que el estado del desencadenador es Iniciado mediante el cmdlet Get-AzDataFactoryV2Trigger:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Haga que el desencadenador se ejecute en Azure PowerShell mediante el cmdlet Get-AzDataFactoryV2TriggerRun. Para obtener información sobre cómo se ejecuta el desencadenador, ejecute el siguiente comando periódicamente. Actualice los valores de
TriggerRunStartedAfter
yTriggerRunStartedBefore
para que coincidan con los valores de la definición del desencadenador:Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -TriggerName "MyTrigger" -TriggerRunStartedAfter "2017-12-08T00:00:00" -TriggerRunStartedBefore "2017-12-08T01:00:00"
Para supervisar las ejecuciones del desencadenador o de la canalización en Azure Portal, consulte la sección sobre la supervisión de ejecuciones de canalización.