In SAP BusinessObjects Data Services, you often need to use the transform "Table Comparison". Within it, you have the choice between three comparison methods: Row-by-row select, Cached comparison table, and Sorted input. This choice can have a huge impact on the data flow performance. Which one is the best for your implementation? That's what we are going to discover in this article. One of the common uses of the "Table comparison" transform is the implementation of slowly changing dimensions (you can see SCD type 2 on the Data Services wiki here) In the screenshot below is a data flow used for SCD type 1.
En una transformación de comparación de tabla, tiene la opción entre los siguientes métodos de comparación: selección de fila por fila, tabla de comparación en caché y entrada clasificada.
La opción predeterminada (elegida automáticamente al crear una nueva transformación de comparación de tablas) es Selección línea a línea. ¿Qué hace? Realmente ejecuta una consulta SQL en la tabla de comparación cada vez que recibe una fila de entrada. Por lo que puede imaginar, este método predeterminado es bastante lento. Debe intentar utilizar sólo para flujos de datos en los que tiene un número pequeño de filas de entrada.
La siguiente opción es la tabla de comparación en caché. En este caso, Data Services cargará toda la tabla de comparación. De lo que entiendo, Data Services sigue realizando una consulta SQL (o equivalente) para cada fila de entrada. Sin embargo, esta vez la tabla de comparación se almacena en caché (en memoria o paginado). Como no hay necesidad de realizar consultas SQL reales en una base de datos, esta opción puede ser mucho más rápida que la selección fila por fila. Por supuesto que tienes que averiguar por ti mismo si vale la pena enviar toda la tabla de comparación en la memoria. Si su tabla de comparación tiene millones de filas y sólo tiene 5 filas de entrada en la transformación de comparación de tabla, probablemente no valga la pena.
La última opción es la entrada Ordenada. Hay un requisito previo para que este método funcione: las filas de entrada se deben ordenar (ascendiendo) en el mismo orden en que se han establecido las claves primarias de la transformación (el campo "Introducir columnas de clave principal"). En la mayoría de los casos esto requerirá que inserte una transformación de consulta antes de la transformación de comparación de tabla y que haga la clasificación correcta en esta transformación. Pero una vez que haya hecho eso, esta opción es más rápida que el método de "tabla de comparación en caché". Como todo está ordenado, los servicios de datos sólo tiene que leer la tabla de comparación una vez. Para darle una idea, para una tabla de comparación con 250 000 filas y tantas filas de entrada, el método "Seleccionar fila por fila" nos llevaba de 7 a 8 minutos. Cambiar a "Entrada ordenada" redujo este tiempo a 7 segundos. Y la "tabla de comparación en caché" sólo fue ligeramente más lenta, con 10 a 12 segundos.
Para resumir: - Pequeño número de filas de entrada: puede mantener el método de comparación "Row-by-row select" por defecto - Gran número de filas de entrada: use "Sorted input" si puede, de lo contrario elija "Cached comparison table".