Archivo por meses: diciembre 2012

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!