SSIS Dinamizando Propiedades de Componentes

8
SSIS Dinamizando propiedades de componentes Es bastante usual tener que utilizar distintas configuraciones a la hora de ejecutar un mismo componente en un paquete ETL, por ejemplo: Si tenemos varios ficheros de texto que queremos cargar en un destino en el mismo proceso. Otro ejemplo bastante ilustrativo es la utilización de una tabla de valores para almacenar y extraer los datos de conexión para un fichero en un ftp. Normalmente, quien no ha trabajado con propiedades dinámicas se encuentra con algunas dificultades que intentaremos mencionar y resolver a través del último ejemplo. Dinamizando propiedades: FTP Task El escenario es el siguiente: necesitamos obtener de distintos servidores/rutas FTP algunos ficheros para almacenarlo en algún sitio. La aproximación más bruta es agregar un componente por cada fichero a descargar y configurar sus propiedades específicas. Es perfectamente válido, pero imagina que tienes más de 100 ficheros que descargar y en el futuro puede ampliarse o variar la configuración de cada uno. Como digo, es posible y factible pero no práctico y fácil de mantener. Escenario Vamos a crearnos una tabla en SQL (o Excel o Access o un TXT, pero ya que vamos a hacerlo bien… un SQL ). create table FTP_DownloadConfigurations ( idConfig int not null identity (1,1), DNS varchar(255), [Path] varchar(255), [File] varchar(255), [Created] datetime not null default(getdate()) )

Transcript of SSIS Dinamizando Propiedades de Componentes

Page 1: SSIS Dinamizando Propiedades de Componentes

SSIS Dinamizando propiedades de componentes

 

Es bastante usual tener que utilizar distintas configuraciones a la hora de ejecutar un mismo componente en un paquete ETL, por ejemplo: Si tenemos varios ficheros de texto que queremos cargar en un destino en el mismo proceso. Otro ejemplo bastante ilustrativo es la utilización de una tabla de valores para almacenar y extraer los datos de conexión para un fichero en un ftp. Normalmente, quien no ha trabajado con propiedades dinámicas se encuentra con algunas dificultades que intentaremos mencionar y resolver a través del último ejemplo.

Dinamizando propiedades: FTP Task

El escenario es el siguiente: necesitamos obtener de distintos servidores/rutas FTP algunos ficheros para almacenarlo en algún sitio.

La aproximación más bruta es agregar un componente por cada fichero a descargar y configurar sus propiedades específicas. Es perfectamente válido, pero imagina que tienes más de 100 ficheros que descargar y en el futuro puede ampliarse o variar la configuración de cada uno. Como digo, es posible y factible pero no práctico y fácil de mantener.

Escenario

Vamos a crearnos una tabla en SQL (o Excel o Access o un TXT, pero ya que vamos a

hacerlo bien… un SQL ). 

create table FTP_DownloadConfigurations (idConfig int not null identity (1,1),DNS varchar(255),[Path] varchar(255),[File] varchar(255),[Created] datetime not null default(getdate()))

Los campos que vamos a utilizar son DNS, Path y File para localizar el fichero a descargar y pasar como propiedades a la tarea FTP de SSIS.

Para este ejemplo he creado dos entradas en la tabla, accediendo a FTPs públicos:

Construyendo la base

Lo siguiente es armar el esqueleto de nuestro paquete:

Page 2: SSIS Dinamizando Propiedades de Componentes

Nos creamos una variable de tipo Object que llamamos Configuraciones o cómo os dé, pero lo importante es saber que aquí tendremos el recordset, el contenido de la tabla creada anteriormente.

También tendremos que añadir variables para recoger el valor de cada campo en el ForEach.Ojo con el ámbito de la variable, debe ser común a todos los componentes, en este caso, al menos la variable DNS debe ser del ámbito de todo el paquete ya que será necesario utilizarla para dinamizar la conexión FTP.

 

Obtener configuración dinámica

Configuramos el ExecuteSQL para que nos devuelva las filas de configuración que nos interesan, en nuestro ejemplo todas. Es importante configurar la opción ResultSet a Full Result Set.

Page 3: SSIS Dinamizando Propiedades de Componentes

Para terminar la configuración del componente nos movemos hasta la sección Result Set y establecemos la variable que va a recoger el resultado:

Configurar el Bucle

Pasemos al siguiente componente, el bucle foreach para recorrer el recordset. Abrimos el su editor y establecemos el tipo de foreach a Foeach ADO Enumerator. Seleccionamos también la variable Configuraciones que contiene el recordset.

Page 4: SSIS Dinamizando Propiedades de Componentes

En la sección Variable Mappings, asignamos las variables que que recogerán los campos del recordset: DNS, Path y File. Es importante respetar el orden de los campos, y configurarlos en el mismo en el que hemos realizado la consulta:

 

Configurando la Tarea FTP

En este componente haremos uso del resto de   variables y hay que configurar las propiedades y expresiones para que tenga un comportamiento dinámico. Abrimos el editor del FTP Task y lo primero que nos solicita es una conexión FTP que no hemos creado. Pulsamos sobre Nueva Conexión

En el editor de la conexión FTP escribimos cualquier dirección FTP real o inventada, para que pueda validarse el formulario. Cuando hayamos pulsado aceptar, nos vamos al panel de Administradores de Conexiones, seleccionamos nuestra conexión FTP y pulsamos F4 para ver sus propiedades. Busca la propiedad Expressions y abre el formulario de asignación de expresiones pulsando el botón de los tres puntos…

Page 5: SSIS Dinamizando Propiedades de Componentes

Buscamos la propiedad Connection String y pulsamos sobre el botón editar […]. Asignamos la variable User::DNS

 

Y salimos de la configuración del administrador de conexión FTP para volver al componente Tarea FTP. La configuración de dinamización puede confundirse con el uso de variables para la configuración del componente. No es lo mismo configurar un componente para que tome un valor para una propiedad desde una variable que asignarle una expresión en función de una  o múltiples variables. Las expresiones puede formarse por variables, pero no sólo por ellas.

Page 6: SSIS Dinamizando Propiedades de Componentes

Para entender la diferencia, vamos a crearnos otra variable que llamamos LocalPath de ámbito del contenedor de secuencias y le establecemos el valor c:\temp o cualquier otra ruta dónde queramos descargar los ficheros.

En la configuración del FTP Task, en la sección File Transfer configuramos las propiedades según la siguiente tabla:

Propiedad Valor

IsLocalPathVariable True

LocalVariable User::LocalPath

Operation Receive Files

IsRemotePathVariable False

RemotePath /pub/mozilla.org/firefox/nightly/latest-mozilla-central/firefox-4.0b9pre.en-US.win32.installer.exe

 

 

Si se dan cuenta, la propiedad IsLocalPathVariable la hemos configurado para que tome el valor de la variable LocalPath. Por el contrario el path remoto lo hemos escrito.

Accedamos a la sección Expressions. Editamos la expresión para la propiedad RemotePath = User::Path + User::File.

Page 7: SSIS Dinamizando Propiedades de Componentes

 

¿Qué pasaría si también configuramos la propiedad LocalPath desde expresiones? Devolvería un error diciendo que no encuentra la variable con nombre de variable con el contenido de nuestra variable LocalPath, en nuestro caso c:\temp…..

Ultimando detalles

Sólo queda configurar la propiedad DelayValidation del FTP Task y del administrador conexión FTP a True para que no intente probar la conexión antes de ejecutar.

 

Y a correr!

 

 

Si no les queda claro algo, coméntenlo y lo vemos.

 

Saludos!