19 marzo 2015

Tarea Execute Package

La Tarea Execute Package ejecuta otro paquete (conocido como el hijo) del paquete actual (conocido como el padre). Este enfoque de padres e hijos es fundamental:
·         Cuando el proyecto necesita ser desarrollado por más de una persona (es más fácil cuando se delegan tareas a cada miembro del equipo).
·         Mientras rompe flujos de trabajo de paquete complejos (también reutiliza partes de paquetes).
·         Para tener un proyecto más organizado, reduciendo el riesgo de fallas y su impacto cuando un subconjunto pequeño o específico del proyecto debe ser actualizado o refinado.
No es recomendable tratar de hacer todo su trabajo dentro de un paquete; el proyecto debería ser dividido en varios componentes que pueden trabajar juntos y ser llamados por un paquete padre.
Este ejercicio demuestra la lógica inherente a un proyecto de Extracción, Transformación y Carga (ETL). ETL es un proyecto que, por naturaleza, es dividido en tres etapas: la primera etapa es responsable de extraer los datos de orígenes, la segunda etapa es responsable de la aplicación de varias transformaciones, como la calidad de datos y las reglas del negocios, y la última etapa es responsable de cargar los datos de origen transformados al destino.

Alistarse

Seguiremos estos pasos para alistarnos:
1.    Abrir el SQL Server Data Tools (SSDT) y crear un nuevo proyecto SSIS.
2.    Proporcione un nombre y una ubicación para el proyecto SSIS y proceda.
3.    Seleccione el paquete creado por defecto y renómbrelo a Master.dtsx.

Ejercicio

Considere un escenario donde SSIS necesita ejecutar periódicamente un proceso ETL. Debido a que el enfoque más común y eficaz es el de dividir el proceso en varias etapas, este ejercicio tendrá un paquete padre llamado Master y tres nuevos paquetes Child, uno por cada etapa de ETL.
Por lo tanto, es necesario añadir tres Tareas Execute Package al Control Flow, uno por cada etapa descrita antes. Aun sabiendo que podríamos tener más paquetes para cada etapa, no es la intención el crear una mayor complejidad.
1.    Agregue tres nuevos paquetes al proyecto SSIS creado para este ejercicio. En el Solution Explorer, bajo la SSIS Packages, seleccione New SSIS Package. Repita este paso dos veces y renombre cada paquete a: Child_Extraccion.dtsx, Child_Transformacion.dtsx y Child_Carga.dtsx.
2.    Para cada paquete hijo, agregue una Tarea Script en su diseñador Control Flow que mostrará un cuadro de mensaje con el nombre del paquete.
3.    Renombre la tarea script a Mensaje PackageName y ábralo para su edición. Seleccione en ScriptLanguage Microsoft Visual Basic 2012 de la pestaña Script.
4.    En la pestaña Script, seleccione la variable de sistema System::PackageName del cuadro desplegable de la propiedad ReadOnlyVariable. Esta variable es utilizada dentro del Editor Script para mostrar un mensaje con su valor respectivo.
5.    Pulse el botón Edit Script... y añada la siguiente línea al procedimiento Main():
6.    Cierre la tarea script y vaya al paquete maestro Master.dtsx.
7.    En el paquete maestro, arrastrar y soltar tres instancias de Tareas Execute Package, uno por cada paquete hijo, de la Toolbox SSIS al diseñador Control Flow; ellos serán llamados desde aquí.
8.    Seleccionar y editar la primera Tarea Execute Package. En la ficha Package, seleccione la propiedad PackageNameFromProjectReference y elegir el paquete hijo que será llamado desde esta tarea. Repita este paso para los dos paquetes hijos restantes.
9.    Ejecutar el paquete pulsando F5 o mediante el menú Debug | Start Debugging. Durante la ejecución, los diversos paquetes serán llamados en la secuencia indicada en el maestro, y se mostrará un mensaje con el nombre del paquete.
 
El aspecto final del paquete maestro Master.dtsx se supone que es similar a la siguiente captura de pantalla:
 

Funcionamiento

Los pasos anteriores explican un escenario simple y básico para el enfoque de Padres e Hijos. Naturalmente, más requerimientos pueden surgir en situaciones del mundo real, y por esa razón algunos detalles de configuración necesitan ser destacados aquí.
Ø  Referencia de proyecto versus referencia externa
En esta nueva versión, la Tarea Execute Package tiene una nueva y útil propiedad llamada ReferenceType. Hay dos tipos asociados con esta propiedad: External Reference y Proyect Reference. Cuando el External Reference es seleccionado, la tarea será conmutada al estilo de una versión 2008R2 previa de SSIS, de trabajar con SQL Server y ubicaciones de paquete File System disponibles. Cuando el Project Reference es seleccionado, es permitido elegir otro paquete del proyecto actual. Este último tipo es una nueva característica que utiliza el escenario del modelo de despliegue de proyecto.
Ø  Ejecutar procesos fuera de proceso versus en proceso
Hay dos posibilidades para ejecutar el llamado paquete hijo: fuera del proceso o en el proceso. Esta funcionalidad puede ser cambiada con la propiedad ExecuteOutOfProcess, que es utilizado para especificar si el paquete hijo se ejecuta en el proceso del paquete padre o en un proceso separado.
Cuando un paquete hijo es ejecutado fuera del proceso, resulta en un nuevo proceso a ser iniciado, en el cual el paquete es ejecutado. Cuando este ejercicio es ejecutado con la propiedad ExecuteOutOfProcess establecido a True, varias instancias de dtshost.exe ejecutándose en Windows Task Manager serán creados y mantenidos "vivos", usando recursos.
Adicional
A menudo es necesario pasar algunos datos entre los paquetes padres e hijos. Un ejemplo podría ser el "reporte RunID" del proceso completo que paquetes hijos deben conocer para realizar una tarea de integración específica. Si se utiliza el modo de despliegue de proyecto, es posible crear parámetros para compartir información importante entre los paquetes.
1.    Crear una variable en el paquete padre (en este ejercicio el paquete maestro es Master.dtsx):
2.    Crear un parámetro childRunID, que recibe el valor proporcionado por el paquete padre. El nombre de esta variable es utilizada en el paquete padre; estableciendo las propiedades Sensitive y Required a False en la ficha Parameters del hijo. La propiedad Sensitive debería ser True cuando el valor del parámetro debe ser encriptada (almacenada en el catálogo SSIS y mostrada en el paquete como NULL), mientras que la propiedad Required debería ser True cuando un valor debería ser asignado antes de la ejecución del paquete.
3.    Ahora que la variable en el paquete padre y el parámetro en el paquete hijo son creados, sólo necesitamos enlazarlos. Bajo el paquete padre (master) seleccionar y editar cada Tarea Execute Package. En la ficha Parameter Bindings establecer el Child package parameter a childRunID y en Binding paremeter or variable establecer la variable padre a User::RunID.
 
La forma más fácil de probar si el valor de la variable está pasando entre padres e hijos es crear una tarea script.

1 comentarios:

Narcizo dijo...

Presento la tarea Execute Package, muy útil para dividir un proyecto en partes mas trabajables. Espero les sirva.