Procesamiento eficiente de la diferencia entre los datos de entrada y la base de datos.

8

Tengo un conjunto de datos de entrada cuyos registros se agregarán a una base de datos existente. Antes de agregarse, los datos pasarán por un procesamiento pesado que requiere mucho tiempo. Quiero filtrar los registros del conjunto de datos de entrada que ya existen en la base de datos para reducir el tiempo de procesamiento.

La diferencia entre la entrada y la base de datos se ilustra aquí: Diferencia de entrada y base de datos

Esta es una descripción general del tipo de proceso que estoy viendo. Los datos de entrada eventualmente alimentarán la base de datos. Flujo de trabajo de procesamiento de entrada

Mi solución actual implica usar un transformador Matcher en la base de datos y la entrada combinadas, luego filtrar el resultado NotMatched usando un FeatureTypeFilter para retener solo los registros de entrada.

¿Existe una forma más eficiente de obtener las características de diferencia?

rovyko
fuente
1
¿Estás usando una base de datos Oracle? puede obtener la base de datos para hacer el trabajo entre tablas delta usando MINUS stackoverflow.com/questions/2293092/…
Mapperz
2
En lugar de leer todo de la base de datos, puede intentar usar a SQLexecutor. Si el atributo _matched_records es 0 en el iniciador, entonces es un complemento
MickyT

Respuestas:

4

Si tiene las características de la base de datos indicadas en el diagrama. Entrada pequeña, superposición pequeña, objetivo grande. Entonces, el siguiente tipo de espacio de trabajo puede funcionar de manera bastante eficiente, a pesar de que realizará múltiples consultas en la base de datos.

ingrese la descripción de la imagen aquí

Entonces, para cada característica leída de la consulta de entrada para la característica coincidente en la base de datos. Asegúrese de que haya índices adecuados en su lugar. Pruebe el atributo _matched_records para 0, realice el procesamiento y luego insértelo en la base de datos.

MickyT
fuente
Encontré que esta es la solución más rápida. Supongo que porque limita la cantidad de datos que se extraen de la base de datos a FME y mantiene el procesamiento del lado SQL.
rovyko
4

No utilicé FME, pero tenía una tarea de procesamiento similar que requería usar la salida de un trabajo de procesamiento de 5 horas para identificar tres posibles casos de procesamiento para una base de datos paralela a través de un enlace de red de bajo ancho de banda:

  • Nuevas características que se agregarán
  • Funciones existentes para actualizar
  • Funciones existentes que se eliminarán

Como tenía una garantía de que todas las características retendrían valores de ID únicos entre pases, pude:

  1. Ejecute un script de procesamiento que generó una tabla de pares {uID, checksum} en las columnas importantes de la tabla actualizada
  2. Usó los pares {uID, checksum} generados en la iteración anterior para transmitir actualizaciones a la tabla de destino con las filas en la tabla actualizada donde el uID estaba EN una subconsulta donde las sumas de verificación no coincidían
  3. Transmita inserciones desde la tabla actualizada que una subconsulta de combinación externa indicó que tenía UIDs no coincidentes, y
  4. Transmitió una lista de UID para eliminar características en la tabla externa que una subconsulta de combinación externa indicó que ya no tenía UID coincidentes en la tabla actual
  5. Guarde los pares actuales de {uID, checksum} para la operación del día siguiente

En la base de datos externa, solo tenía que insertar las nuevas características, actualizar los deltas, llenar una tabla temporal de uIDs eliminados y eliminar las características en la tabla de eliminación.

Pude automatizar este proceso para propagar cientos de cambios diarios a una tabla de 10 millones de filas con un mínimo impacto en la tabla de producción, utilizando menos de 20 minutos de tiempo de ejecución diario. Funcionó con un costo administrativo mínimo durante varios años sin perder la sincronización.

Si bien es ciertamente posible hacer N comparaciones entre M filas, el uso de un resumen / suma de verificación es una forma muy atractiva de realizar una prueba de "existencia" con un costo mucho menor.

Vince
fuente
4

Utilice featureMerger, uniendo y agrupando por los campos comunes de BASE DE DATOS Y DATOS DE ENTRADA. ingrese la descripción de la imagen aquí

Jorge Vidinha
fuente