Вы находитесь на странице: 1из 4

Cmo se puede en un Flujo de Datos (Data Flow) de SSIS

insertar slo las filas nuevas?


Esta es una situacin muy tpica al realizar procesos de carga con SSIS que se
ejecutan peridicamente. Por ejemplo, si estamos cargando la facturacin de una
empresa, queremos que slo se inserten los nuevos clientes, pues al intentar
insertar un cliente existente se producira un error de violacin de clave.
Principalmente, tenemos de formas de afrontar este problema con SSIS.

Utilizando la tarea Merge Join. Esta tarea permite realizar un Join entre
dos Flujos de datos de SSIS. A diferencia de la tarea Merge, Merge Join
permite realizar no slo un INNER JOIN, sino tambin un LEFT OUTER JOIN o
un FULL OUTER JOIN.
La tarea Merge Join, y al igual que la tarea Merge, slo tiene dos
entradas (es posible utilizar varias tareas Merge o Merge Join en cascada).
Es requisito que sus entradas estn ordenadas, para lo cual, se suele utiliza
tareas Sort.
En el caso que nos ocupa, deberemos utilizar un LEFT OUTER JOIN.
Seguidamente, utilizaremos una tarea Conditional Split, que nos permita
definir una salida con slo los nuevos clientes, siendo esta salida la que
conectaremos con nuestro destino de datos. La condicin que utilizaremos en
la nueva salida ser algo como "ISNULL(ClienteID)".
Finalmente, el Flujo de Datos (Data Flow), quedar como se muestra en la
siguiente imagen.

Utilizando la tarea Lookup. Esta tarea permite hacer una bsqueda


(Lookup) sobre otra tabla u origen de datos, permitiendo devolver un valor
asociado. Un ejemplo de caso de uso tpico es el siguiente: si estamos
cargando en SQL Server un fichero de empleados en el que viene el cdigo de
la categora profesional del empleado, pero que no incluye el nombre o
descripcin de dicha categora, se podra utilizar la tarea Lookup para hacer
una bsqueda sobre la tabla de Categoras, y obtener de la misma la
descripcin de la categora para cada empleado.
En el ejemplo de las Facturas, al cargar la tabla de Clientes, podemos utilizar
una tarea Lookup para obtener de la tabla Clientes de nuestro Data
Warehouse, el cdigo del mismo. De este modo, si obtenemos como cdigo
NULL, ser porque el cliente es nuevo !!.
Aqu existe un problema: la tarea Lookup por defecto, slo funciona si para
cada fila encuentra otra fila en la tabla de bsqueda. En caso contrario se
produce el error "Row yielded no match during lookup". Por lo tanto, no
podramos utilizar la tarea Lookup para nuestros fines.
Sin embargo, es posible alterar la configuracin de la salida de error de la
tarea Lookup. Para ello, editar la tarea Lookup (click con el botn derecho
sobre la tarea Lookup, y despus click Edit). En el dilogo Lookup
Transformation Editor, click sobre el botn Configure Error Output. A
continuacin, en el dilogo Configure Error Output, modificar su configuracin
como se muestra en la siguiente imagen de ejemplo.

Realizado esto, es necesario utilizar una tarea Conditional Split, que nos
permita definir una salida con slo los nuevos clientes, siendo esta salida la
que conectaremos con nuestro destino de datos. La condicin que
utilizaremos en la nueva salida ser algo como"ISNULL(ClienteID)".

Como conclusin, podemos comentar lo siguiente:

Utilizando la tarea Merge Join. Es la manera natural de resolver el


problema que nos ocupa. Aunque el desarrollo del Data Flow se hace ms
complejo, se da un uso apropiado a las tareas utilizadas.
Utilizando la tarea Lookup. Resulta ms fcil y rpido el desarrollo del Data
Flow. Sin embargo, implica realizar un uso no apropiado de la tarea
configuracin de la salida de error.

Вам также может понравиться