Incremental Query seleziona tutti i record anziché solo quelli nuovi

Scopri come risolvere il problema di Adobe Campaign Classic in cui le query incrementali non funzionano come previsto.

Descrizione description

Ambiente

Campaign Classic

Problema/Sintomi

Le query incrementali non funzionano come previsto. Invece di raccogliere solo i nuovi record dall’ultima esecuzione, vengono selezionati tutti i record ogni volta come una normale attività di query.

Risoluzione resolution

Questo problema è stato risolto nella versione Adobe Campaign Classic 20.1.1 (build 9122 e successive).

Soluzioni alternative che gli utenti possono utilizzare:

Soluzione 1: arrestare il flusso di lavoro di pulizia ed eseguirlo in modo intermittente per pulire il database e l'unità disco rigido finché la correzione non viene eseguita e disponibile. Non è consigliato se non hai un aggiornamento pianificato.

Soluzione 2: si supponga che l'attività di query incrementale sia interessata. Risolvere il problema facendo la stessa cosa che fa la query incrementale creando uno schema persistente che contenga il contenuto della tabella della cronologia. Utilizza una combinazione di attività di query e aggiornamento dati per simulare il comportamento. Questa operazione deve essere eseguita per tutti i flussi di lavoro che richiedono la query incrementale.

Soluzione alternativa 3:  Supponiamo che l’attività di query incrementale sia interessata. Risolvere il problema aggiungendo un campo di controllo tsCreated/tsLastModified allo schema in questione. La query incrementale verrà quindi convertita in una normale attività di query con una clausola Where come tscreated< GetDate().

Soluzione alternativa 4:

  1. Creare una nuova sequenza xtknewworkflowid e inizializzarla in un percorso molto diverso dagli intervalli workflowId correnti.
  2. Modificare lo schema xtkworkflow per utilizzare pkSequence.
  3. Chiedi all’utente di clonare tutti i flussi di lavoro interessati ed eliminare quelli originali.
  4. Quando l'utente è pronto per un aggiornamento, rimuovere questa correzione ripristinando xtknewId per la creazione del flusso di lavoro (per evitare sorprese indesiderate).

Causa
Il problema principale è il flusso di lavoro di pulizia.

Il flusso di lavoro di query incrementale funziona nel modo seguente:

  1. Gestisce una tabella di cronologia con i risultati delle iterazioni precedenti.
  2. Recupera tutte le righe dalla query di destinazione.
  3. Esclude tutte le righe presenti nella tabella di cronologia
  4. Aggiunge i risultati rimanenti nella tabella della cronologia per il successivo filtro dell'iterazione.

Il nome della tabella di lavoro della cronologia ha la seguente notazione:
wkfhisto<workflowid> <activityName>_

Ora, per gli ID flusso di lavoro < 0 (per gli utenti in cui xtknewid consente sequenze negative), vediamo che si tratta in realtà di:

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