You are on page 1of 7

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 utilizacin de una tabla de valores para almacenar y extraer los datos de conexin para un fichero en un ftp. Normalmente, quien no ha trabajado con propiedades dinmicas se encuentra con algunas dificultades que intentaremos mencionar y resolver a travs del ltimo ejemplo. Dinamizando propiedades: FTP Task El escenario es el siguiente: necesitamos obtener de distintos servidores/rutas FTP algunos ficheros para almacenarlo en algn sitio. La aproximacin ms bruta es agregar un componente por cada fichero a descargar y configurar sus propiedades especficas. Es perfectamente vlido, pero imagina que tienes ms de 100 ficheros que descargar y en el futuro puede ampliarse o variar la configuracin de cada uno. Como digo, es posible y factible pero no prctico y fcil 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 pblicos:

Construyendo la base Lo siguiente es armar el esqueleto de nuestro paquete:

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

Tambin tendremos que aadir variables para recoger el valor de cada campo en el ForEach.Ojo con el mbito de la variable, debe ser comn 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 conexin FTP.

Obtener configuracin dinmica Configuramos el ExecuteSQL para que nos devuelva las filas de configuracin que nos interesan, en nuestro ejemplo todas. Es importante configurar la opcin ResultSet a Full Result Set.

Para terminar la configuracin del componente nos movemos hasta la seccin 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 tambin la variable Configuraciones que contiene el recordset.

En la seccin Variable Mappings, asignamos las variables que que recogern 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 dinmico. Abrimos el editor del FTP Task y lo primero que nos solicita es una conexin FTP que no hemos creado. Pulsamos sobre Nueva Conexin

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

Buscamos la propiedad Connection String y pulsamos sobre el botn editar []. Asignamos la variable User::DNS

Y salimos de la configuracin del administrador de conexin FTP para volver al componente Tarea FTP. La configuracin de dinamizacin puede confundirse con el uso de variables para la configuracin del componente. No es lo mismo configurar un componente para que tome un valor para una propiedad desde una variable que asignarle una expresin en funcin de una o mltiples variables. Las expresiones puede formarse por variables, pero no slo por ellas.

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 dnde queramos descargar los ficheros. En la configuracin del FTP Task, en la seccin File Transfer configuramos las propiedades segn la siguiente tabla: Propiedad IsLocalPathVariable LocalVariable Operation IsRemotePathVariable RemotePath Valor True User::LocalPath Receive Files False /pub/mozilla.org/firefox/nightly/latest-mozillacentral/firefox-4.0b9pre.enUS.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 seccin Expressions. Editamos la expresin para la propiedad RemotePath = User::Path + User::File.

Qu pasara si tambin configuramos la propiedad LocalPath desde expresiones? Devolvera 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 Slo queda configurar la propiedad DelayValidation del FTP Task y del administrador conexin FTP a True para que no intente probar la conexin antes de ejecutar.

Y a correr!

Si no les queda claro algo, comntenlo y lo vemos.

Saludos!

You might also like