05 Manual SSIS – Ejecutar consultas SQL

En algunas ocasiones necesitaremos ejecutar alguna consulta SQL dentro de nuestro paquete SSIS. Para realizar esta tarea BIDS pone a nuestra disposición el componente «Execute SQL Task».

Este componente podremos utilizarlo dentro de la pestaña «Control Flow» donde se define el flujo general de nuestra ETL.

Execute SQL Task

Una vez añadido este componente hacemos doble clic sobre él y podremos asignarle valores a sus propiedades. Las dos propiedades más básicas son la conexión y la sentencia a ejecutar.

Si no tenemos creada ninguna conexión, podremos añadirla en la sección «Connection Managers» pulsando con el botón derecho en un área vacía.

Connection Managers

Una vez creada, daremos valor a las propiedades «Connection» y «SQL  Statement».

Execute SQL Task 2

Este componente nos dará mucho más juego pudiendo realizar sentencias SQL dinámicas mediante el uso de variables dentro de los paquetes SSIS, pero para ello le dedicaremos un post completo porque da mucho para hablar.

04 Manual SSIS – Conversión entre tipos de datos

Una transformación habitual en los paquetes SSIS es la conversión entre tipos de datos. SSIS dispone de un componente específico para estas cuestiones y se trata del objeto «Data Conversión». Para emplear este componente simplemente tendremos que agregarlo dentro de nuestro Data Flow en un punto determinado. Por ejemplo,

Data Conversion

Al hacer doble clic sobre el mismo aparecerán todos los campos de entrada disponibles hasta el momento.

Para realizar la conversión de tipos de datos simplemente tendremos que seleccionar cada uno de los campos que queremos convertir, indicar el tipo de dato deseado y asignar un nuevo nombre para la columna. En este caso vamos a convertir la columna «Title» de la tabla Person de AdventureWorks de un texto Unicode a no Unicode. Esta conversión quedaría como:

Data Conversion

Como se puede ver la columna «Data Type» contiene numerosas opciones de conversión de tipos de datos.

Otra opción disponible para realizar conversiones entre tipos de datos es el componente «Derived Column». Esta opción es un poco más laboriosa pero igual de efectiva. El sistema de conversión de tipos de datos es un «cast» inspirado en lenguajes basados en C. El formato sería:

Destino = (NUEVO_TIPO_DE_DATO) Campo_Origen

Por ejemplo: (DT_UI8) Campo_Numerico.

En este caso haremos la conversión de un campo de tipo «Unsigned Int» de 8 bytes.

Data Conversion con Derived Column

Espero que se haya entendido todo!

03 Manual SSIS – Columnas Derivadas

Una de las transformaciones más útiles es la creación de columnas derivadas «Derived Column».

Una columna derivada no es más un nueva columna que añadimos a nuestro Flujo de trabajo y que podremos generar con un valor predefino o en base a un determinado cálculo con los valores de entrada.

Para explicar su funcionamiento y posibilidades partiremos de un nuevo proyecto SSIS en el que añadiremos un «Data Flow Task» con un flujo básico como el siguiente.

Data Flow Task

Si hacemos clic sobre «Derived Colum» podremos acceder a sus propiedades.

El parte superior izquierda tenemos acceso a las variables internas de SSIS, así como a los campos que obtenemos con «Ole DB Source».

Derived Column 01

Para realizar alguna operación con estos elementos debemos arrastrarlos hasta el Grid situado en la parte interior de la pantalla quedando así:

Derived Column 02

En la sección derecha tenemos agrupadas todas la operaciones que podemos realizar siendo:

  1. Funciones matemáticas básicas.
  2. Funciones de cadenas.
  3. Funciones de fecha/hora.
  4. Comprobaciones de valores NULL en función del tipo de dato.
  5. Funciones de conversión de datos.
  6. Operadores.

En nuestro ejemplo realizaremos un substring del campo «LastName» partiendo de la base de que necesitamos los dos primeros caracteres de este campo. Por tanto, iremos a «String Functions» y arrastraremos la función SUBSTRING.

Substring

La completaremos con los siguientes valores:

SUBSTRING( [LastName], 1, 2 )

Partiendo de la base de que las cadenas en SSIS tienen base 1. Es decir, el primer carácter es el 1 y no el 0 como en otros sistemas.

Estas funciones de cadena (o de cualquier otro tipo) se pueden combinar. Si por ejemplo, queremos poner el resultado en mayúscula dejaríamos la expresión como:

UPPER(SUBSTRING( [LastName], 1, 2 ) )

Por último faltaría asignarle un nombre a nuestra columna derivada. Por ejemplo, «NewLastName».

Derived Column 03

No dejéis de revisar el resto de funciones aplicables a expresiones de columnas derivadas. Empleándolas de forma correcta nos darán muchísimo juego a la hora de crear nuestros paquetes SSIS.

02-Manual SSIS – Creación de un paquete básico

En esta ocasión veremos cómo desarrollar un paquete SSIS básico como una especie de «Hola mundo!» para adentranos en materia.

Supongamos que en nuestra compañía existen dos servidores de datos:

  1. Un servidor transacional con el detalle de cada una de las operaciones que se registran en nuestra empresa.
  2. Un servidor con información comercial que llegará a los distintos departamentos de nuestra empresa.

En este caso nuestro jefe nos pide que agrupemos una determinada información de ventas en base a una serie de criterios.

Para ello los pasos a seguir serían:

  1. Realizar una consulta que agrupe y filtre la información del servidor transacional en base a los requerimientos establecidos.
  2. Realizar un paquete SSIS que guarde la información en el servidor con la información comercial.

Una vez situados en nuestro contexto, iniciaremos nuestro primer paquete SSIS.

Para ello abriremos BIDS y haremos un nuevo proyecto de Integration Services.

Nuevo proyecto SSIS

Nuevo proyecto SSIS

Una vez generado el nuevo proyecto, veremos como la plantilla de proyecto de Visual Studio nos añade cuatro carpetas automáticamente y en la carpeta SSIS Packages tenemos un nuevo paquete SSIS vacío.

Como siempre a la izquierda tenemos todos los componentes que podremos emplear para crear nuestro paquete SSIS. El control más básico es «Data Flow Task» que nos permite definir un origen de datos, una transformación y un destino para almecenar el resultado de nuestras operaciones con los datos.

Data Flow Task

Para iniciar el proceso una vez creado nuestro componente Data Flow Task es hacer doble clic sobre el mismo y tendremos acceso a los siguientes componentes:

  1. Data Flow Sources.
  2. Data Flow Transformations
  3. Data Flow Destinations.

Data Flow Task

Esta disposición es realmente útil para entender el funcionamiento de este componente.

En cuanto a los orígenes de datos tenemos una amplia gama de posibilidades destacando:

  1. Ficheros de texto plano.
  2. Hojas de Excel.
  3. Orígenes OLEDB (Access, SQL Server, Oracle, ODBC, etc.)
  4. Ficheros XML.

Para nuestro caso vamos a emplear un origen ADO para conectarnos a un SQL Server que dispone de la base de datos de ejemplo AdventureWorks.

Por lo tanto añadimos el control «OleDB Source», hacemos doble clic sobre el mismo y configuramos la conexión y seleccionamos la tabla «Person.Person».

OleDB Source

Una vez definido el origen, podremos aplicar transformaciones en los datos que leeremos en el paso anterior. En este caso aplicaremos una transformación muy sencilla que es «Derived Colum» que permite añadir una nueva columna en nuestro Data Flow como resultado de una operación con los datos de origen.

Por tanto, arrastramos el componente «Derived Column» y lo conectamos con el «OleDB Source» tirando del conector Success (la flecha verde) que marcará el siguiente paso a ejecutar si el resultado de la lectura de datos ha finalizado sin errores. Estos conectores son extremadamente versátiles para que podamos definir el flujo del SSIS en caso de que se produzcan errores controlados o no.

Derived Column

En nuestro caso vamos a controlar si el campo «Title» de Person es nulo y en ese caso vamos a darle el valor «N/A» (Not Assigned) para guardarlo en nuestra tabla de destino. Para ello hacemos doble clic sobre el componente «Derived Column» para añadir el nuevo campo y la expresión que lo genera.

La expresión que debemos usar en este caso es:

ISNULL(Title) ? «N/A» : Title

En cuanto al nombre de la nueva columna podemos asignarle «TileModified» tal y como se muestra en la siguiente imagen.

Expresión Derived Column

Con esto ya podemos terminar nuestro paquete SSIS asignando un destino para este DataFlow. Por simplicidad, vamos a guardar el destino en una nueva tabla de SQL Server pero lógicamente SSIS nos da muchas más opciones. Por ejemplo,

  1. Fichero Excel.
  2. Fichero de texto.
  3. OleDB (Access, SQL Server, Oracle, ODBC, etc.).
  4. Cubos OLAP.

Arrastramos nuestro componente «OleDB Destination» y haciendo doble clic podemos seleccionar el destino de nuestra transformación.

OleDB DestinationOleDB Destination

Haciendo clic en «New» BIDS ya nos sugiere la creación de una nueva tabla con la estructura de nuestro DataFlow.

Create table destinationEn nuestro caso quitaremos la columna «TileModified» de la SQL de generación de la tabla de destino quedando así:

CREATE TABLE [PersonModified] (
[BusinessEntityID] int,
[PersonType] nvarchar(2),
[NameStyle] bit,
[Title] nvarchar(8),
[FirstName] nvarchar(50),
[MiddleName] nvarchar(50),
[LastName] nvarchar(50),
[Suffix] nvarchar(10),
[EmailPromotion] int,
[AdditionalContactInfo] ntext,
[Demographics] ntext,
[rowguid] uniqueidentifier,
[ModifiedDate] datetime
)

Con la tabla ya creada sólo nos queda seleccionar la opción Mapping para decirle a SSIS que en la columna de destino «Title» debe copiar el valor de la columna de origen «TitleModified».

OleDB Destination Mappings

Si pulsamos el botón ejecutar en Visual Studio se producirá el lanzamiento del paquete SSIS que realizará el copia de datos, terminando así la creación de nuestro primer SSIS.

DataFlow Result

Espero que la lectura os haya resultado amena!

01-Manual SSIS – SSIS, Visual Studio y Management Studio

Una vez explicado qué es SSIS es la hora de definir el flujo de trabajo habitual con él y las herramientas de trabajo disponibles.

Sevicio SSIS

Una vez instalado SQL Server veremos que se ha añadido un nuevo servicio de Windows SQL Server Integration Services 10.0 (en el caso de la versión 2008 de SQL Server). Como es de esperar este servicio tiene que estar iniciado para poder ejecutar paquetes SSIS.

SQL Server Integration Services 10.0

Servicio Windows de SQL Server Integration Services 10.0

SQL Server Management Studio

SQL Server Management Studio nos permitirá conectanos al servidor de Intregration Services y poderar administrar y ejecutar los paquetes SSIS. Para en la ventana Object Explorer, seleccionaremos Connect y haremos clic sobre el menú Integration Services.

Conectar SSIS

Conectar con SSIS

Una vez seleccionada escribimos el nombre del servidor SSIS (NO el nombre de la instanacia SQL Server).

Management Studio SSIS

SQL Server Management Studio conectado a un servidor SSIS

SQL Server Business Intelligence Development Studio (BDIS)

Por último, para el desarrollo de los paquetes SSIS usaremos Microsoft Visual Studio. La versión que necesitamos (la BDIS) forma parte de la instalación de SQL Sever y dispone de las plantillas de proyectos necesarias para el trabajo con SSIS.

SQL Server Business Intelligence Development Studio

SQL Server Business Intelligence Development Studio