En la entrada anterior sobre este tema comentábamos lo pobre que era la transformación Import Column (necesidad de otros objetos para poder acceder a los archivos, complicada de configurar, sin un asistente que facilite esta operación…). También veíamos cómo con un sencillo objeto Script Component de tipo Source podíamos crearnos nuestro propio origen para usar la transformación citada, pero comentábamos en el final de la entrada que sería genial poder crearnos nuestro propio origen de datos que pudiéramos usar directamente en nuestra base de datos SQL Server, tal y como hacemos con cualquier otro.
Bueno, pues aquí os pongo a vuestra disposición un componente de tipo Data Flow Source que es posible añadir a la barra de herramientas y por tanto reutilizar en cualquier paquete SSIS que creéis. Algo parecido lo podéis encontrar en MSDN (aquí), pero digamos que el que aquí comentamos ofrece un poco más de funcionalidad, aparte de que no tendréis que escribir ninguna línea de código para usarlo.
Añadirlo a la caja de herramientas
Básicamente lo único que necesitáis es descargaros el archivo SourceImportColumn.dll, copiarlo en C:Archivos de programaMicrosoft SQL Server90DTSPipelineComponents (o vuestro directorio en donde se encuentre instalado SQL Server) y arrastrarlo (no vale con copiar y pegar) a C:windowsassembly (o donde se encuentre el directorio de Windows de vuestra máquina). Estos pasos se detallan también en MSDN (aquí).
Luego, usarlo es muy sencillo: desde la barra de herramientas de un nuevo paquete SSIS, botón derecho y seleccionamos la opción Choose Items… para que nos aparezca la ventana Choose Toolbox Items. Nos situamos en la pestaña SSIS Data Flow Items, desplazándonos hasta que aparezca el componente Source Import Column (sí, el nombre no es que sea muy original, ¿verdad?). Marcamos el checkbox y nos debería aparecer en la barra de herramientas
ventana para seleccionar el componente
componente disponible en la barra de herramientas
Configuración de sus propiedades y uso
Una vez añadido en un data flow, tan sólo tendremos que configurar tres propiedades:
- Directory será la carpeta donde se encuentran los archivos que queremos cargar en nuestra base de datos
- FileSpec es el filtro que queremos aplicar para seleccionar unos archivos determinados. Por ejemplo, si sólo queremos incorporar los de tipo txt, pues indicamos el valor *.txt; si queremos cargar todos, pues ponemos *.*
- Recurse indicará si queremos incluir los subdirectorios (Y) o no (N) que se puedan encontrar en la ruta indicada
La siguiente imagen nos muestra la ventana de configuración del componente:
configuración de sus propiedades
Tan sólo nos queda añadir un destino válido y arrastrar la flechita verde que sale de nuestro componente a dicho destino. Sin necesidad de usar la transformación Import Column ni ninguna otra. Como un origen cualquiera, ofrece una serie de columnas que podremos importar en el destino o usar en otras transformaciones:
- fullyQualifiedName nos muestra la ruta y nombre completos del archivo que se esté tratando
- name es el nombre del archivo
- extension es la extensión del archivo
- createdDate es su fecha de creación
- modifiedDate es la fecha de la última modificación que se realizó al archivo
- size es el tamaño (KB) del archivo
- bytes es la columna DT_IMAGE que se corresponderá a la columna BLOB de la tabla destino
columnas disponibles
Y… ya está, no hay que hacer nada más. El componente está listo para ser usado.
Limitaciones
Una cosa a tener en cuenta, eso sí. El problema que nos podemos encontrar es que el tamaño de los archivos sea tan grande que nos quedemos sin memoria. En mi equipo de pruebas, con 2Gb, el tamaño máximo de archivo que me aceptaba eran 550Mb, por lo que he decidido poner dicho límite para que no salte la excepción de OutOfMemory. Creo que es un tamaño lo suficientemente grande como para que no sea una gran limitación en el uso diario del componente, aunque en cualquier caso, si dentro de los archivos a tratar se encontrara uno que excediera de estas 550Mb, no se produce un error, sino que se saltará, mostrando en la salida un mensaje de advertencia indicándolo: “[Source Import Column] Warning: The size of the file ‘archivo’ exceeds the maximun allowed. The file will be skipped”