Академический Документы
Профессиональный Документы
Культура Документы
Versión 1.0
GERENCIA TI
SubGerencia Arquitectura de Software
2015
CONTENIDO
1. INTRODUCCION ......................................................................................... 3
2. INTEGRIDAD DE DATOS Y CONTINUIDAD OPERACIONAL .......................... 3
2.1. Reglas para las Conexiones ...................................................................................................... 3
2.2. Declaración de Packages ........................................................................................................... 4
3. PARÁMETROS V/S VARIABLES ................................................................... 5
3.1. Manejo de errores [Correo – Web Service] ........................................................................ 6
3.2. Componente Data Flow .............................................................................................................. 8
3.3. Tarea Tipo “For Each Loop” .................................................................................................... 10
1. INTRODUCCION
Esta guía tiene como objetivo ayudar en el desarrollo y en la revisión de proyectos de Integration
Services, también conocidos en la empresa como “ETLs”.
Se debe tener cuidado en que si en algún componente hubo un error, el flujo de datos quede
consistente y trazable de ser necesario (con algún indicador y/o fecha).
En el caso que hubiese un error, por cualquier motivo, y el ETL se ejecuta nuevamente en su
próxima iteración, no deben quedar datos duplicados, ni faltantes. La consistencia debe ser lo más
importante en estos proyectos.
Conexiones de proyecto:
Las conexiones a las Bases de Datos Siempre deben ser de proyecto y no por cada Package,
aunque solamente haya un package, ya que si posteriormente se desea agregar otro, lo más
probable es que se utilicen las mismas conexiones.
Nombres conexiones
Las conexiones deben tener un nombre que identifique claramente el servidor, la base de datos y
el usuario con el cual se realice la conexión.
Conexiones repetidas
Dos conexiones iguales (mismo servidor, misma base de datos y mismo usuario) solo causa
desorden y duplicidad.
Conexiones innecesarias
Nombres packages
Los packages deben tener nombres que indiquen claramente las funciones que realizan.
Dependiendo del valor que se desea manejar, se podría necesitar que el alcance de la variable sea
para todo el proyecto, para todo el package o incluso para un componente del package en
particular.
Si se sospecha que el valor pudiese cambiar luego, es más sencillo guardar este valor en un
parámetro ya que posteriormente se puede modificar su valor desde el servidor y no es necesario
modificar en la ETL para luego “Re-Publicar”.
Está disponible un proyecto plantilla (Ver archivo “Proyecto Plantilla ETL - SSIS.rar”) que tiene
incorporado el manejo de errores. Este considera:
Se encapsula toda la lógica del package en un contenedor (Secuence Container), el cual en caso
de error envía un correo mediante un Web Service.
Web Service
El contrato de este servicio se guarda localmente en la máquina donde se está ejecutando el ETL
y la ruta que se debe crear para guardarlo es:
En la sección Event Handlers, se indica que al haber error en algún paso del contenedor, capture
la descripción del error en una variable y el nombre del package en el asunto que se enviará en el
correo.
Parámetros
En la sección Project.params, se pueden modificar los parámetros para indicar a quién enviarle el
correo de error y con copia. En este caso se están manejando a nivel de proyecto ya que
seguramente se les enviará a las mismas personas los errores de los distintos packages del
proyecto.
Tener cuidado en que los correos van entre los signos “<” y “>” y separados por “;”.
Procedimientos almacenados
Al utilizar procedimientos almacenados en un ETL, los errores pueden ser manejados en éste con
una sentencia Try..Catch, o dentro del ETL. Esto dependerá de la lógica que se desee utilizar y del
proyecto.
En el caso de utilizar un procedimiento almacenado para obtener datos en un Data Flow, este
procedimiento no debe tener lógicas adicionales como update o delete ya que Integration
Services no sabe qué hacer con los mensajes que envía el motor de base de datos, solo se debe
realizar el Select en el procedimiento y manejar lo demás en procedimientos distintos.
El componente Data Flow se utiliza para traspasar datos de un origen a un destino, siendo estos
últimos bastante variados, tablas en bases de datos, procedimientos almacenados en los
orígenes, archivos de texto plano o archivos Excel.
Los orígenes y destinos deben indicarnos fácilmente desde dónde hasta dónde van los datos.
Esto lo indicaremos de la siguiente forma:
[SERVIDOR] - [BASE DE DATOS] - [TABLA PRINCIPAL O PROCEDIMIENTO ALMACENADO]
Lookup
El componente Lookup se utiliza para ir a buscar datos según una llave a otra fuente o también
puede servir para ver si esa otra fuente no tiene ciertos datos, sin la necesidad de traerse toda
una tabla de una fuente a otra.
Para ir a buscar datos a otra fuente se debe ser bien explícito en qué parte de los datos vamos a
buscar, aplicar los filtros correspondientes y seleccionar solamente los campos necesarios, ya
que todos estos datos se levantarán en memoria para su búsqueda.
Una tarea muy usual en la integración de datos, es ir a consultar una lista de registros y por cada
uno de ellos realizar otras tareas. En este ejemplo se consulta una lista de correos y por cada uno
de ellos se envía el correo y luego se actualiza su estado.
Para esto se debe crear una variable de tipo Object, en la cual se debe almacenar el set de datos
que se utilizará para ir recorriendo.
Se debe utilizar un componente Execute SQL Task en donde se ejecutará una sentencia SQL o
procedimiento almacenado que entregue como resultado una lista de registros. Esta se debe
configurar en la sección Result Set como Full Result Set.
Y en el menú Result Set a la izquierda del panel, se debe asignar la variable tipo Object creada
previamente.
Por último, se debe mapear los campos de la lista de registros que se utilizarán posteriormente
partiendo desde el index 0 (cero).
Luego solo se tendrá que conformar la lógica que se aplicará para cada uno de los registros dentro
del contenedor.