La consulta incremental recoge todos los registros en lugar de solo los nuevos

Obtenga información sobre cómo solucionar el problema de Adobe Campaign Classic en el que las consultas incrementales no funcionan según lo esperado.

Descripción description

Entorno

Campaign Classic

Problema/Síntomas

Las consultas incrementales no funcionan según lo esperado. En lugar de recoger solo los registros nuevos desde la última ejecución, recogen todos los registros cada vez, como una actividad de consulta normal.

Resolución resolution

Este problema se corrige en la versión 20.1.1 de Adobe Campaign Classic (versión 9122 y posteriores).

Soluciones alternativas que los usuarios pueden usar:

Solución alternativa 1: detenga el flujo de trabajo de limpieza y ejecútelo de forma intermitente para limpiar la base de datos y el disco duro hasta que se aplique la corrección y esté disponible. No se recomienda si no tiene una actualización planificada.

Solución alternativa 2: suponga que la actividad de consulta incremental se ve afectada. Soluciónelo haciendo lo mismo que hace la consulta incremental creando un esquema persistente para guardar el contenido de la tabla del historial. Utilice una combinación de actividades query y update data para imitar el comportamiento. Esto deberá hacerse para todos los flujos de trabajo que requieran la consulta incremental.

Solución alternativa 3:  Supongamos que la actividad de consulta incremental se ve afectada. Soluciónelo agregando un campo de auditoría tsCreated/tsLastModified al esquema en cuestión. La consulta incremental se convertirá en una actividad de consulta normal con una cláusula where como tscreated< GetDate().

Solución alternativa 4:

  1. Cree una nueva secuencia xtknewworkflowid e inicialícela en algo que esté lejos de los intervalos workflowId actuales.
  2. Cambiar el esquema xtkworkflow para usar este(a) pkSequence.
  3. Pida al usuario que clone todos los flujos de trabajo afectados y elimine los originales.
  4. Una vez que el usuario esté listo para una actualización, quite esta corrección volviendo a xtknewId para la creación del flujo de trabajo (para evitar sorpresas no deseadas).

Causa
El problema principal es el flujo de trabajo de limpieza.

El flujo de trabajo de consulta incremental funciona de esta manera:

  1. Mantiene una tabla de historial con los resultados de iteraciones anteriores.
  2. Obtiene todas las filas de la consulta de destino.
  3. Filtra todas las filas presentes en la tabla del historial
  4. Añade los resultados restantes a la tabla del historial para el siguiente filtrado de iteraciones.

El nombre de la tabla de trabajo del historial es de la siguiente notación:
wkfhisto<workflowid> <activityName>_

Ahora, para workflowID < 0 (para usuarios en los que xtknewid permite secuencias negativas), vemos que en realidad es:

wkfhisto<(uint)workflowid> <activityName>_

Although this is okay for workflow execution.

So, for example, the incremental activity incremental1 of workflow ID=-1 will create a table wkfhisto4294967295_incremental1.

The thing which is missed is the CleanUp workflow.

Here, we have a code that tries to delete worktables of deleted workflows.

A dedicated code here lists all the wkfhisto tables, extracts the workflowId from their names (from the above convention), and deletes them all except the ones whose worklowIDs are found in the xtkworkflow table.

However, it misses the uint part.

So, it tries to look up a workflow with ID 4294967295 instead of casting this back to int. Since this workflow is not found, this table is deleted. Next time, when this workflow runs, the incremental query activity does not find an existing history table and creates it thinking of this as the first run ever.

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f