insertar solo filas nuevas en flujo de datos

4
8/19/2019 Insertar Solo Filas Nuevas en Flujo de Datos http://slidepdf.com/reader/full/insertar-solo-filas-nuevas-en-flujo-de-datos 1/4 ¿Cómo se puede en un Flujo de Datos (Data Flow) de SSIS insertar sólo las filas nuevas? Esta es una situación muy típica al realizar procesos de carga con SSIS que se ejecutan periódicamente. Por ejemplo, si estamos cargando la facturación de una empresa, queremos que sólo se inserten los nuevos clientes, pues al intentar insertar un cliente existente se produciría un error de violación 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 sólo un INNER JOIN, sino también un LEFT OUTER JOIN o un FULL OUTER JOIN. La tarea Merge Join, y al igual que la tarea Merge, sólo tiene dos entradas (es posible utilizar varias tareas Merge o Merge Join en cascada). Es requisito que sus entradas estén 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 sólo los nuevos clientes, siendo esta salida la que conectaremos con nuestro destino de datos. La condición 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.

Upload: elvin-jose-landeta

Post on 08-Jul-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Insertar Solo Filas Nuevas en Flujo de Datos

8/19/2019 Insertar Solo Filas Nuevas en Flujo de Datos

http://slidepdf.com/reader/full/insertar-solo-filas-nuevas-en-flujo-de-datos 1/4

¿Cómo se puede en un Flujo de Datos (Data Flow) de SSISinsertar sólo las filas nuevas?

Esta es una situación muy típica al realizar procesos de carga con SSIS que seejecutan periódicamente. Por ejemplo, si estamos cargando la facturación de una

empresa, queremos que sólo se inserten los nuevos clientes, pues al intentarinsertar un cliente existente se produciría un error de violación de clave.

Principalmente, tenemos de formas de afrontar este problema con SSIS.

 

Utilizando la tarea Merge Join. Esta tarea permite realizar un Join entredos Flujos de datos de SSIS. A diferencia de la tarea Merge, Merge Joinpermite realizar no sólo un INNER JOIN, sino también un LEFT OUTER JOIN oun FULL OUTER JOIN.

La tarea Merge Join, y al igual que la tarea Merge, sólo tiene dos

entradas (es posible utilizar varias tareas Merge o Merge Join en cascada).Es requisito que sus entradas estén ordenadas, para lo cual, se suele utilizatareas Sort.

En el caso que nos ocupa, deberemos utilizar un LEFT OUTER JOIN.Seguidamente, utilizaremos una tarea Conditional Split, que nos permitadefinir una salida con sólo los nuevos clientes, siendo esta salida la queconectaremos con nuestro destino de datos. La condición que utilizaremos enla nueva salida será algo como "ISNULL(ClienteID)".

Finalmente, el Flujo de Datos (Data Flow), quedará como se muestra en lasiguiente imagen.

Page 2: Insertar Solo Filas Nuevas en Flujo de Datos

8/19/2019 Insertar Solo Filas Nuevas en Flujo de Datos

http://slidepdf.com/reader/full/insertar-solo-filas-nuevas-en-flujo-de-datos 2/4

 

  Utilizando la tarea Lookup. Esta tarea permite hacer una búsqueda(Lookup) sobre otra tabla u origen de datos, permitiendo devolver un valorasociado. Un ejemplo de caso de uso típico es el siguiente: si estamos

cargando en SQL Server un fichero de empleados en el que viene el código dela categoría profesional del empleado, pero que no incluye el nombre odescripción de dicha categoría, se podría utilizar la tarea Lookup para haceruna búsqueda sobre la tabla de Categorías, y obtener de la misma ladescripción de la categoría para cada empleado.

En el ejemplo de las Facturas, al cargar la tabla de Clientes, podemos utilizaruna tarea Lookup para obtener de la tabla Clientes de nuestro DataWarehouse, el código del mismo. De este modo, si obtenemos como códigoNULL, será porque el cliente es nuevo !!.

Aquí existe un problema: la tarea Lookup por defecto, sólo funciona si para

cada fila encuentra otra fila en la tabla de búsqueda. En caso contrario seproduce el error "Row yielded no match during lookup". Por lo tanto, nopodríamos utilizar la tarea Lookup para nuestros fines.

Sin embargo, es posible alterar la configuración de la salida de error de latarea Lookup. Para ello, editar la tarea Lookup (click con el botón derechosobre la tarea Lookup, y después click Edit). En el diálogo LookupTransformation Editor, click sobre el botón Configure Error Output. Acontinuación, en el diálogo Configure Error Output, modificar su configuracióncomo se muestra en la siguiente imagen de ejemplo.

Page 3: Insertar Solo Filas Nuevas en Flujo de Datos

8/19/2019 Insertar Solo Filas Nuevas en Flujo de Datos

http://slidepdf.com/reader/full/insertar-solo-filas-nuevas-en-flujo-de-datos 3/4

 

Realizado esto, es necesario utilizar una tarea Conditional Split, que nospermita definir una salida con sólo los nuevos clientes, siendo esta salida laque conectaremos con nuestro destino de datos. La condición queutilizaremos en la nueva salida será algo como"ISNULL(ClienteID)".

Page 4: Insertar Solo Filas Nuevas en Flujo de Datos

8/19/2019 Insertar Solo Filas Nuevas en Flujo de Datos

http://slidepdf.com/reader/full/insertar-solo-filas-nuevas-en-flujo-de-datos 4/4

 

Como conclusión, 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 máscomplejo, se da un uso apropiado a las tareas utilizadas.  Utilizando la tarea Lookup. Resulta más fácil y rápido el desarrollo del Data

Flow. Sin embargo, implica realizar un uso no apropiado de la tareaconfiguración de la salida de error.