Tutorial Talend Open Studio. # 5 Organización Jobs de Bases de datos
Organizar la ejecución vinculando subjobs con triggers
Cuando incorporamos diferentes subjobs dentro de un job como se muestra en el tutorial anterior. Un elemento fundamental a tener en cuenta en el diseño de nuestros procesos, es que la ejecución de los mismos siga un orden.
Lo primero que tenemos que tener claro es que la ejecución de los jobs no sigue el orden estricto en el que están situados en el lienzo el Job. Ni esperan a ejecutarse a que finalice el anterior, por lo que muy posiblemente ocurrirá si nuestros subjobs no se ejectutan siguiendo un orden, que el resultado del proceso no sea el adecuado. Las variables o conjunto de datos que generamos en un subjob para utilizar en el otro estarán incompletos y viciando el resultado del proceso.
Para asegurarnos que que el orden de ejecución sea el correcto la solución es subordinar los jobs con «triggers» (disparadores). Como nos muestra la imagen siguiente, el primer job se convierte en subjob principal de ambos subjobs. El subjob segundo pierde el color verde del componente principal (sólo se mantiene en verde el componente principal del primer subjob). Esto ocurre porque el segundo subjob está conectado mediante un trigger de tipo «Subjob Ok , por lo que el segundo subjob esperará a que el primer subjob finalice y solo arrancará si el primer subjob finaliza con éxito. Esto asegura que la ejecución del job sea el adecuado!.
Si trabajamos de esta manera organizando la ejecución de los subjobs, ya estamos solucionamos la mayoría de los problemas potenciales.
Pero aún no es el mejor diseño, debido a que en este caso que trabajamos con imputs y outputs de base de datos. Cada subjob se ejecuta dentro de una transacción SQL. Esto genera que tengamos abiertas conexiones y diferentes transacciones con colas de ejecución de las que no disponemos de tanto control y nos pueden perjudicar el rendimiento del proceso.
Gestión de conexiones «PreJob» y «Postjob»
La mejor manera de solucionar el problema de las conexiones múltiples es mediante la gestión centralizada de las conexiones con el componente prejob que nos posibilita abrir las conexiones antes que se ejecute nada del job y luego con el componente postjob cerrar las conexiones una vez se han ejecutado todos los subjobs del Job
Como nos muestra la imagen el componente prejob asegura que primero de todo se ejecuten la cadena de componentes de apertura de conexiones a las bases de datos.
Luego se ejecutan los dos jobs que hemos diseñado y en el caso del segundo subjob que realiza un output a una tabla de base de datos le hemos añadido dos componentes más:
- Commit: Confirma la entrada de datos. Por eso le unimos el trigger que el subjob es ok, pues estamos confirmando el proceso únicamente si todo funciona correctamente.
- Rollback: Si se produce un error, retrocede los datos que hayan podido entrar, debido a que está conectado a un trigger de subjob error. Así se evita que en la tabla de destino tengamos datos inconsistentes por una entrada incompleta de datos motivada por un error de proceso.
Finalmente cerramos las conexiones con un componente Postjob que mediante una cadena de disparadores (trigger) «On Subjob Ok» cierra las conexiones existentes.
Antoni Lisbona: Director de BuConDa
Volver índice contenidos tutorial