A la hora de escribir en una tabla hay que tener en cuenta si los registros que queremos insertar existen ya o no. Si ya existen lo normal sería actualizarlos, y lo que no existen insertarlos. Informatica permite definir este comportamiento basándose en los campos que definamos como claves para saber si un registro ya existe o no, y si hay que actualizar o insertar.
La opción més sencilla es definir los campos que van a hacer de clave primaria para que la herramienta ETL pueda decidir si ya existe o no, y actualizar o insertar en consecuencia. Para ello hay que definir a nivel de sesión la opción ‘Update’ en ‘Treat all source rows as’, y en el tabulador del mapping, en el target marcar el check ‘Update else insert option’. Después, en el nivel de mapping, hay que marcar las columnas que identifican los registros como ‘Primary Keys’
Pero si se quiere contemplar todas las opciones hay que tener en cuenta también los registros que hayan dejado de existir en las tablas origen y que, por tanto, haya que marcar o eliminar en las tablas destino. Entonces la opción más completa es utilizar un ‘Full joiner’ para unir origen y destino, y después una transformación de Router para crear un camino o grupo para cada caso, uno para los que no existan en destino (caso insert), otro para los que existan en origen y destino (caso update), y otro para los que existan en destino, y en origen ya no (caso delete).
Para el insert sólo hay que conectar directamente el target, y para los otros dos hay que pasar por una transformación de ‘estrategia de actualización’, una para actualizar y otra para eliminar registros.
Como una imagen vale más que mil palabras ésta el la imagen de un blog que explica en detalle lo que hay que hacer para crear un mapping de insert/update/delete:
Mapping de Informatica para Insert Update y Delete
Este comentario de la Informatica Network que reproduzco aquí sobre cómo configurar las diferentes opciones de actualización de la tabla destino también puede ser muy útil:
- Only perform inserts into a target table.
When you configure the session, select Insert for the Treat Source Rows As session property. Also, make sure that you select the Insert option for all target instances in the session.
- Delete all rows in a target table.
When you configure the session, select Delete for the Treat Source Rows As session property. Also, make sure that you select the Delete option for all target instances in the session.
- Only perform updates on the contents of a target table.
When you configure the session, select Update for the Treat Source Rows As session property. When you configure the update options for each target table instance, make sure you select the Update option for each target instance.
- Perform different database operations with different rows destined for the same target table.
Add an Update Strategy transformation to the mapping. When you write the transformation update strategy expression, use either the DECODE or IIF function to flag rows for different operations (insert, delete, update, or reject). When you configure a session that uses this mapping, select Data Driven for the Treat Source Rows As session property. Make sure that you select the Insert, Delete, or one of the Update options for each target table instance.
- Reject data.
Add an Update Strategy transformation to the mapping. When you write the transformation update strategy expression, use DECODE or IIF to specify the criteria for rejecting the row. When you configure a session that uses this mapping, select Data Driven for the Treat Source Rows As session property.
- Inicie sesión para enviar comentarios