Está en la página 1de 16

MICROSOFT SQL-SEVER/SSIS

Manual introductorio

ARON CABALLERO MACIAS


SUDAMERICANA DE SOFTWARE S.A.
Ing. Jonathan Quintana – Ing. Erick Melgar
CONTENIDO

Herramientas necesarias ................................................................................. 2


Crear un nuevo proyecto ................................................................................. 2
Elementos fundamentales de la interfaz ........................................................ 3
Ejemplo practico .............................................................................................. 4
Descripción ..................................................................................................... 4
Declaración de variables ................................................................................. 4
Tarea SQL ...................................................................................................... 5
Tarea Flujo De Datos ...................................................................................... 8
Tarea Script .................................................................................................. 12
Tareas SQL para el manejo de errores y Procedimientos almacenados. ..... 14
Anexos ............................................................................................................ 15
Herramientas necesarias

Antes de iniciar su primer proyecto de integración debe instalar las siguientes


herramientas:

Microsoft Visual Studio 2019 - Link de descarga

SQL Server Integration Services Projects – Link de descarga

Data Storage and processing – Visual studio installer/Other toolsets (Figura 1)

Figura 1: Herramienta data storage en visual studio installer.

Crear un nuevo proyecto

Si las herramientas previas fueron instaladas correctamente usted ya está listo para
iniciar un nuevo proyecto de integración. En el panel de Visual Studio seleccione la
opción Nuevo Proyecto y en la casilla de búsqueda tipee SSIS. Seleccione la primera
opción para crear un proyecto nuevo de integración (Figura 2).

Figura 2: Creación de un nuevo proyecto de integración.


Elementos fundamentales de la interfaz

Todo proyecto de integración posee cuatro elementos principales que usted usara a lo
largo de la implementación del proyecto. Estos elementos se muestran a continuación.

Figura 3: Interfaz de usuario para un proyecto SSIS.

Explorador de la solución: Permite administrar los archivos de configuración para el


proyecto, conexión, paquetes e integraciones con servicios externos. Es en este panel
en el cual podrá crear nuevos paquetes (archivos con extensión dtsx).

Panel de herramientas: Este panel ofrece las herramientas de integración para el


manejo de datos. Elementos que permiten desde la ejecución de consultas SQL, hasta
la ejecución de tareas Hadoop o Jobs de transferencia.

Panel de diseño: En el se define el flujo de las tareas que nos otorga el panel de
herramientas. Podemos manejar dos tipos de flujo, de control (para tareas) y de datos
(para consultas, transformaciones y destino de datos). Dentro de este panel podemos
observar la pestaña de parámetros en la cual definimos variables que serán utilizadas a
lo largo del proyecto.

Administrador de conexiones: Su función principal es mostrar las conexiones


establecidas en el proyecto. Debe tenerse en cuenta que por cada base de datos
utilizada en la integración se obtendrá una conexión en este panel.

Para iniciar un proyecto bastara con seleccionar un elemento del panel de herramientas
y posicionarlo en el de diseño. Una vez se encuentre conforme con el flujo podrá
ejecutarlo presionando la tecla F5 o el botón Ejecutar.
Ejemplo practico
El ejemplo presentado a continuación muestra la interacción entre los elementos
fundamentales de un proyecto SSIS.

Descripción
Se otorga los datos de facturación para una serie de clientes. Las entidades
involucradas se muestran en la Figura 4. El ejemplo muestra como obtener el monto
total para los clientes que poseen facturas. Se extraerá la suma de todas las facturas y
los datos personales de cada cliente. Luego se enviarán estos datos hacia un servicio
REST. Los archivos utilizados en la elaboración de este ejemplo pueden encontrarse en
la sección anexos.

Figura 4: Diagrama relacional para el ejemplo propuesto.

Declaración de variables
Para iniciar con la tarea debe crear las variables que se usaran a lo largo de la
implementación. Para mostrar el panel de variables debe posicionarse sobre el panel
de diseño, dar click derecho y seleccionar la opción Variables. Esto desplegará el panel
de variables (Figura 5).

En el panel de variables se dispone de tres opciones, agregar, mover y eliminar


variable, marcadas en el cuadro rojo inferior (Figura 5). Para propósitos de este ejemplo
se usará tres variables: una de tipo cadena (MainUrl) para la url del servicio, otra de tipo
decimal (TotalFacturas) para el total de las facturas, y (Clientes) de tipo Objeto para
obtener los registros personales de cada cliente. Existen otros tipos de datos para las
variables, boléanos, nulos, single y enteros sin signo. Como regla general las variables
de tipo objeto son utilizadas para el almacenamiento de registros y objetos del sistema:
listas, instancias de tipos definidos, etc.
Tarea SQL
Para seguir con el ejemplo se utilizará tres tareas, una de tipo SQL, flujo de datos y de
tipo script. Podemos arrastrarlas al panel de diseño desde el panel de herramientas.

Figura 5: Panel de variables para el paquete.

Figura 6: Tareas utilizadas en el ejemplo.

Podemos modificar el nombre de cada tarea usando la tecla F2. La primera tarea que
se implementará será la que obtiene la suma total de los clientes con factura. Para
implementar una tarea de tipo SQL debemos definir su conexión a la base de datos. Al
dar doble click sobre la tarea Obtener total facturas se desplegará su cuadro de
configuración (Figura 7).
Figura 7: Cuadro de configuración para la tarea Obtener total facturas.

Al desplegar el combo de la opción Connection podrá agregarse la configuración de


conexión para dicha tarea. Las configuraciones de conexión permiten definir las bases
de datos a las que tendrá acceso la tarea. En el cuadro siguiente debe seleccionarse la
opción New, esto desplegará el administrador de conexiones en el cual debe indicarse
las credenciales de acceso. Si desea autenticarse con un usuario y contraseña deberá
desplegar el combo Authenticacion. Como paso final debe seleccionarse la base de
datos a utilizar (Figura 8). Debe notarse que a pesar de haber definido la conexión se
mantiene un error en la tarea. Esto se debe a que no se ha incluido un script SQL para
ejecutar. Debe incluirse la sentencia SQL que sumará el total de todas las facturas
(Figura 9). Luego de incluir la instrucción SQL presione en aceptar hasta cerrar los
cuadros de configuración. El error para la tarea se ha corregido. Es momento de asignar
el resultado del query a la variable TotalFacturas. Abra el cuadro de configuración para
la Tarea SQL. Seleccione el tipo de resultado que retornará la consulta, una sola fila
para nuestro ejemplo, pero podría ser un conjunto de resultados (Figura 10).

Figura 8: Cuadro de configuración para la conexión a la DB.


Figura 9: Cuadro de configuración para la consulta SQL.

Figura 10: Configuración para obtener el resultado.

Para finalizar con la configuración de la tarea, debe asignar el valor del registro único a
la variable. Dentro del cuadro de configuración para la tarea diríjase a la sección Result
Set y siga los pasos de la (Figura 11).

Figura 11: Asignación del resultado a una variable.


Antes de continuar, es menester aclarar que el resultado de tipo único para un query
debe coincidir con el tipo de la variable asignada. Podríamos obtener todos los registros
de un query y almacenarlos en una variable de tipo object. Si se desea obtener el
registro completo (todos los campos) o mas de un registro (filas y columnas), debe
seleccionarse la opción Full Result Set en paso descrito por la (Figura 10).

Tarea Flujo De Datos


Para la siguiente configuración, debe ingresar a la tarea de tipo Flujo de datos (Obtener
clientes con facturas). Al dar doble click en dicha tarea se despliega el Panel de diseño
para el flujo de datos, en este nuevo panel encontrará un cuadro de herramientas
totalmente nuevo. Gracias a la herramienta OLE DB Source usted podrá generar una
conexión a la DB. Para construir un join entre las tablas clientes y facturas debe
generar la conexión de forma similar a una Tarea SQL. Es posible reutilizar la conexión
configurada con anterioridad (Figura 12).

Figura 12: Cuadro de configuración de conexión para la herramienta OLE DB Source.

Luego de configurar ambos orígenes de datos, debe ordenarlos y realizar el join, luego
almacenarlo en una variable. Cada uno de estos pasos se lleva a cabo con un elemento
del panel de herramientas. El primer elemento es Sort, dado que previo a un Merge
Join debe ordenarse como mínimo un campo por cada tabla (esto puede omitirse, pero
se recomienda realizar dicho ordenamiento). Para el ejemplo propuesto el campo
utilizado es la clave foránea id_cliente (Figura 13).

Para continuar con el flujo hacia el elemento Merge Join debe seleccionarse la dirección
de cada tabla (Izquierda o Derecha). Dado que se espera obtener los datos del cliente
se la utilizará dicha tabla con posición izquierda (Figura 14). Es posible seleccionar los
campos que se tomarán del join o modificar su tipo (Figura 15). Para finalizar se ordena
la salida del Merge Join, remueve los duplicados y asigna la salida a una variable
mediante el elemento Recordset Destination. En el cuadro de configuración para el
elemento RecordSet Destination, debemos seleccionar la variable de tipo objeto
Clientes, previamente declarada. Las variables adicionales que se pueden visualizar
son variables del sistema, utilizadas para obtener información del entorno, resultados
de tareas ejecutadas con anterioridad, etc. (Figuras 16 – 17).

Figura 13: Cuadro de configuración para el elemento Sort.

Figura 14: Selección de la dirección para cada tabla.


Figura 15: Selección de los campos para los registros seleccionados.

Antes de finalizar la configuración para la variable de salida en el elemento RecordSet


Destination debe asegurarse de seleccionar los campos que desea recuperar para
cada registro. Para propósitos de este ejemplo se tomarán todos los campos, esta
acción puede visualizarse en las (Figuras 17 – 18).

Figura 16: Ordenamiento y remoción de duplicados.


Figura 17: Selección de variable destino para los registros obtenidos.

Figura 18: Selección de campos para los registros obtenidos.

Puesto que, ya se dispone de ambos resultados de interés, suma total de las facturas
y clientes con al menos una factura, es menester enviar dichos datos al servicio REST
de su preferencia. Sin embargo, para este ejemplo se ha diseñado un endpoint de
prueba que retorna los datos enviados. La función de este endpoint es permitirle
depurar el estado de la petición, y así poder visualizar como la tarea que envía los datos
espera la respuesta.
Tarea Script
Para realizar una petición HTTP a un servicio externo se dispone de dos posibilidades,
tareas de tipo Web Service (servicios definidos mediante WSDL) o tareas de tipo Script
las cuales permiten definir la petición mediante HttpClient. Para el ejemplo actual se
utilizará una tarea de tipo Script.

Figura 19: Selección de variables a utilizar en el script.

Al momento de configurar la tarea de tipo script debe seleccionar las variables que este
utilizará. Adicionalmente, previo a la implementación del script deben agregarse las
referencias para la vinculación JSON y el cliente HTTP. En el cuadro de exploración
de la ventana emergente podrá llevar a cabo esta tarea. Debe agregar la referencia para
System.Net.Http y System.Text.Json filtrada por la palabra json (Figura 20).

Figura 20: Incorporación de referencias.


A continuación, se detalla el script implementado. Desde las líneas 86 a 105 se define
una clase para la vinculación de los datos del cliente (Figura 21).

Figura 21: Clase de vinculación para los datos del cliente.

El script principal de ejecución se define en la función main líneas 109 a 155. Se define
un objeto de tipo DataTable y OleDbDataAdapter y se lo inicializa con los registros
obtenidos en tareas previas (líneas 113 – 115). Luego se procede a iterar esta tabla de
datos y crear objetos de tipo Cliente con los datos de sus columnas (líneas 119 – 126)
(Figura 22). Para el envio de los datos debe crearse un cliente HTTP y transformar los
datos de tipo Objeto a String (líneas 136 – 140). Para finalizar se envía la petición a
través del método PostAsync del objeto HttpClient (líneas 142 – 145). Este método
recibe dos parámetros, la url y el cuerpo de la petición. Para controlar el resultado de la
petición se utiliza la propiedad Result, lo cual bloquea la ejecución hasta que se
complete la tarea. Finalmente, se controla el resultado (líneas 147- 153) (Figura 23).

Figura 22: Definición del DataTable para los registros de usuarios.


Figura 23: Administración de la petición HTTP.

Tareas SQL para el manejo de errores y Procedimientos almacenados.


Para finalizar con este ejemplo se mostrará como administrar el manejo de errores para
una tarea y registrarlo en una tabla de logs mediante la llamada de un procedimiento
almacenado. En la (Figura 24) se ha creado una tarea para manejar posibles errores al
momento de ejecutar la tarea Script. Para configurar un flujo de error debe
seleccionarse la flecha que une la tarea Script y SQL. En el cuadro de configuración se
debe elegir la opción Failure lo cual restringirá la ejecución de la tarea siguiente solo si
la anterior fracasa.

Figura 23: Administración de la petición HTTP.

Figura 24: Administración de la petición HTTP.


El query SQL para la tarea de log ejecuta un procedimiento almacenado previamente
declarado (ver Script SQL en anexos) (Figura 24).

Anexos

Imagen modelo relacional: https://i.imgur.com/p2O2OMF.png


Script SQL: https://gitlab.com/-/snippets/2282874
Repositorio Servicio REST: https://gitlab.com/josue.caballero.macias/servicio-rest-
practica-ssis
Repositorio proyecto SSIS: https://gitlab.com/josue.caballero.macias/practica-ssis

También podría gustarte