miércoles, 3 de octubre de 2012

SSIS Dividiendo datos de una tabla en varios ficheros


El caso que nos traemos entre manos hoy viene propiciado por un hilo del foro de Microsoft Integration Services (en inglés) en el que se solicitaba ayuda para volcar información de una tabla que contiene transacciones. Cada transacción está compuesta por varias filas y se pretendía guardar la información relacionada con cada transacción en un fichero de texto y hacerlo con una sola ejecución del paquete ETL.


Solución

La solución es muy sencilla. En lugar de obtener un sólo dataset con todas las filas y luego intentar segmentarlo, vamos a obtener los distintos identificadores de transacciones en un dataset que recorreremos con un ForEach en el que se estará ejecutando una dataflow que realizará una consulta filtrada y generará un fichero de texto por cada un de las transacciones.
Descarga el script para crear la tabla y datos de muestra Una vez tenemos creados los datos, vamos a crear dos variables. Una de tipo Object que va a almacenar el dataset con los distintos números de transacción y la segunda de tipo Int32 en la que vamos a mapear el número de transacción en cada iteración del recordset que vamos a hacer en el ForEach. En la imagen siguiente se muestra como queda el Control Flow: image Dentro del dataflow solo tenemos que añadir un componente de origen OLEDB y escribir la consulta para obtener todos las columnas de la tabla, filtrando por el número de transacción: DataSource Para lograr que con cada ejecución del dataflow se escriban los datos en un archivo distinto, sólo tenemos que añadir una expresión a la propiedad ConnectionString del administrador de conexión del archivo de destino (flat file destination): "C:\\Output\\Transaction_" + Right("000" +  (DT_STR,10,1252)(@[User::TransactionId]), 3) + ".txt" Y con esto ya lo tenemos listo. Es un caso muy sencillo pero es bastante habitual encontrarnos con este tipo de operaciones y como siempre hay una primera vez para todo… seguro que algun@ le encuentra utilidad. Descarga el paquete del ejemplo desde Skydrive








1 comentario:

  1. hola estoy haciendo este ejemplo en 2012 y al ejecutarlo me da error y warning ya tengo la BD creada y la tabla segùn script publicado acà

    Error: failed to lock variable "User::Transactions" for read access with error 0xC0010001 "The variable cannot be found. This occours when attempt is made to retrieve a variable from the Variables collection on a container during execution of the package, and the variable is not there. The variable name may have changed or the variable is not being created.".
    Error: The variable name "User::Transactions" could not be found in the list of variables.

    Warning: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (3) reached the maximum allowed(1): resulting in failure. This occours when the number of errors reaches the number of errors reaches the number specified in MaximumErrorCount. Changed the MaximuMErrorCount or fix the errors.


    por favor , podrìa ayudarme?

    gracias!

    ResponderEliminar

Entradas populares