17 marzo 2015

Tarea File System

Aunque los sistemas han evolucionado mucho en términos de tecnología, de comunicaciones y de seguridad, el acceso a datos a los sistemas de origen a menudo se logra a través de archivos planos. A los responsables de los "Sistemas Operativos" (SO) no les gustan las aplicaciones que ellos no entienden del todo, y que extraen volúmenes desconocidos de datos en horas desconocidas, de sus sistemas. Incluso cuando alguien trata de cambiar esto, siempre recibe la misma reacción: "¡No voy a permitir que altere mi sistema con algo que yo no conozco!". Ellos prefieren mantener el control y hacer de los orígenes de datos disponibles en archivos planos en algunas "áreas de staging", a pesar de abrir directamente 'puertas' en el SO. Por lo tanto, la lectura de archivos de texto y el tratamiento posterior, es una práctica ampliamente utilizada principalmente en un escenario Data Warehousing conocido como el modelo PUSH. En este enfoque, el SO inicia la extracción de datos a un repositorio externo (generalmente conocido como un área de staging) que es accedido por un proceso de ETL.
Para manejar estas operaciones de archivos y carpetas, SSIS proporciona la tarea File System. Esta tarea realiza operaciones de archivos disponibles bajo la clase .NET System.IO.File listada aquí:
·         Copy directory - Copia una carpeta de una ubicación a otra.
·         Copy file - Copia un archivo de una ubicación a otra.
·         Create directory - Crea una carpeta en una ubicación especificada.
·         Delete directory - Elimina una carpeta en una ubicación especificada.
·         Delete directory content - Elimina todos los archivos y carpetas en una carpeta.
·         Delete file - Elimina un archivo en una ubicación especificada.
·         Move directory - Mueve una carpeta de una ubicación a otra.
·         Move file - Mueve un archivo de una ubicación a otra.
·         Rename file - Renombra un archivo en una ubicación especificada

Alistarse

Para utilizar este ejercicio, el archivo plano ArchivoTextoPlano.txt y la carpeta Archivos Procesados deberían existir en la siguiente ubicación del sistema de archivos:
 

Ejercicio
Considere el escenario donde SSIS necesita periódicamente mirar en una parte específica (sistema de archivos) para un archivo plano producido por el Sistema Operacional (SO) que contiene los datos que deben ser integrados en un repositorio central. Por lo tanto, es necesario leer los datos del archivo plano bajo una carpeta compartida específica y, si la tarea tiene éxito, entonces el archivo de origen debería ser renombrada y movida a la carpeta Archivos Procesados. El vídeo de este ejercicio se encuentra en: https://www.youtube.com/watch?v=SiU98QejNng Los pasos más importantes son descritos a continuación aquí:
1.    Abrir el SQL Server Data Tools (SSDT) y crear un nuevo proyecto SSIS.
2.    Proporcione un nombre y una ubicación para el proyecto SSIS y proceda.
3.    Seleccione el paquete creado por defecto y cámbiele el nombre a FileSystem.dtsx.
4.    Para hacer al paquete flexible para cambios futuros, crear variables SSIS para el origen, el destino y los valores NombreArchivo. En el panel Variables, haga clic en el botón Add variable para crear las siguientes variables:
·         vuDirectorioOrigen como tipo de datos String con la ruta de origen de archivo plano:
C:\SSIS\Control Flow\Archivos
·         vuDirectorioDestino como tipo de datos String con la ruta de destino de archivos planos:
C:\SSIS\Control Flow\Archivos\Archivos Procesados
·         vuNombreArchivo como tipo de datos String con el nombre de origen de archivo plano:
ArchivoTextoPlano
5.    Agregue un Data Flow al Control Flow con el fin de leer los datos y hacer una transformación simple, nómbrelo como Leer y Cargar Flat File.
6.    Desde la Toolbox SSIS, arrastre y suelte un componente de origen Flat File al diseñador y edítelo, nómbrelo como Leer Archivo Plano.
7.    Crear una nueva conexión cmFlatFile que apunta al origen de archivo plano ArchivoTextoPlano.txt.
8.    Desde el Toolbox SSIS, arrastre y suelte una Derived Column (nómbrela  como Hacer Alguna Transformacion) para aplicar una concatenación del nombre con el apellido (en el campo Expression colocar: Nombre + " " + Apellido) en el campo Derived Column Name coloque NombreCompleto.
9.    Para ver el flujo de datos fluyendo en la pipeline, agregue un componente Unión All (este componente debería ser reemplazado con un componente de destino).
10.  El paquete está listo para leer los datos del origen. Ahora es necesario mover y renombrar el archivo de origen. De vuelta en el diseñador Control Flow, arrastre y suelte una tarea File System para mover el archivo a una nueva ubicación; renómbrela como Mover Archivo a Directorio Procesado. Agregar una restricción de precedencia entre el Data Flow y este componente y utilice los siguientes pasos para editarlo:
·         En el desplegable Operation, seleccione Move File.
·         En las propiedades Source Connection seleccione la conexión cmFlatFile en el desplegable SourceConnection creado previamente.
·         En las propiedades Destination Connection, establezca IsDestinationPathVariable a True y seleccione la variable de usuario vuDirectorioDestino en el desplegable DestinationVariable con ruta de carpeta de destino.
11.  Pulse el botón OK para finalizar y vincular la tarea Data Flow para esta tarea a través de la flecha de salida verde.
12.  Ejecute el paquete pulsando F5 y si es exitoso, eche un vistazo a la ubicación del sistema de archivos para confirmar si el archivo fue trasladado a ...\Archivos Procesados.
13.  Arrastre y suelte otra tarea File System para renombrar el archivo movido en el paso anterior; renómbrelo como Renombrar Archivo Procesado. Una la tarea File System anterior con la actual, con la flecha de salida verde
14.  En la desplegable Operation, seleccione Rename File.
15.  En las propiedades SourceConnection seleccione New Connection… en la desplegable SourceConnection, y establezca esta conexión al archivo renombrado creado antes. Renombre la conexión recién creada como cmProcessedFile.
16.  En las propiedades DestinationConnection seleccione DestinationConnection en el desplegable New Connection, y establezca esta conexión al archivo renombrado creado antes. Renombre la conexión recién creada como cmRenamedFile.
17.  Pulse el botón OK para finalizar y vincular la tarea File System anterior a esta tarea a través de la flecha de salida verde.
18.  En el administrador de conexión del paquete, seleccione cmRenamedFile, vaya al panel Properties y pulse Expressions para construir dinámicamente la conexión.
 
19.  Mueva manualmente el archivo ArchivoTextoPlano.txt movido durante la ejecución previa, al directorio ...\Archivos Procesados, a su ubicación original.
20.  Ejecute el paquete de nuevo presionando F5 y si tiene éxito, eche un vistazo a la ubicación del sistema de archivos para confirmar si el archivo fue renombrado y trasladado a ...\Archivos Procesados.
 
21.  Si el paquete se ejecuta de nuevo, un error se disparará porque el archivo de origen ya no existe (el archivo cambió de nombre y se trasladó a un lugar diferente).
 
22.  Hacer uso de los registros generados por SSIS en la ficha Progress para cada ejecución del paquete y ver varios tipos de entradas de registro que proporcionarán una información más precisa sobre cada ejecución.
Adicional
Este ejercicio podría necesitar varias mejoras. Si hay una necesidad de iterar sobre una serie de archivos o directorios, la tarea File System puede ser colocada dentro de un bucle como un Foreach Loop.
Como una consecuencia, y debido a que los nombres de archivos cambian, las conexiones de paquetes deben ser pasadas dinámicamente a través de expresiones SSIS. Se sugiere que incluye una tarea para verificar si cada archivo que será ejecutado en cada interacción del bucle exista en la ubicación del sistema de archivos como se ha configurado en el paquete.

2 comentarios:

Narcizo dijo...

Aquí tenemos esta tarea File System, incluido un vídeo en youtube. poco a poco iré incluyéndole un video a todos los post.

Luis dijo...

Narcizo para leer 3 archivos dbf y renombrar el nombre tengo que usar 3 variables como source y destino?