Inkrementell fråga hämtar alla poster i stället för bara nya

Lär dig hur du åtgärdar ett Adobe Campaign Classic-problem där inkrementella frågor inte fungerar som förväntat.

Beskrivning description

Miljö

Campaign Classic

Problem/symtom

Inkrementella frågor fungerar inte som förväntat. I stället för att bara hämta nya poster sedan den senaste körningen, plockas alla poster upp varje gång som en vanlig frågeaktivitet.

Upplösning resolution

Problemet har åtgärdats i Adobe Campaign Classic 20.1.1 (version 9122 och senare).

Tillfälliga lösningar som användare kan använda:

Tillfällig lösning : Stoppa rensningsarbetsflödet och kör det regelbundet för att rensa upp databasen och hårddisken tills korrigeringen är klar och tillgänglig. Vi rekommenderar inte om du inte har en planerad uppgradering.

Tillfällig lösning 2: Anta att den inkrementella frågeaktiviteten påverkas. Undvik problemet genom att göra samma sak som den inkrementella frågan gör genom att skapa ett beständigt schema för innehållet i historiktabellen. Använd en kombination av fråga och uppdatera dataaktiviteter för att efterlikna beteendet. Detta måste göras för alla arbetsflöden som kräver den inkrementella frågan.

Lösning 3:  Anta att den inkrementella frågeaktiviteten påverkas. Undvik problemet genom att lägga till ett granskningsfält tsCreated/tsLastModified i det aktuella schemat. Din inkrementella fråga konverteras sedan till en normal frågeaktivitet med en where-sats som tscreated< GetDate().

Lösning 4:

  1. Skapa en ny sekvens, xtknewworkflowid, och initiera den till något långt från de aktuella arbetsflödes-ID-intervallen.
  2. Ändra xtkworkflow-schemat så att det här pkSequence används.
  3. Be användaren klona alla berörda arbetsflöden och ta bort de ursprungliga.
  4. När användaren är redo för en uppgradering tar du bort den här korrigeringen genom att återgå till xtknewId för att skapa arbetsflödet (för att undvika oönskade överraskningar).

Orsak
Huvudproblemet är rensningsarbetsflödet.

Det inkrementella frågearbetsflödet fungerar så här:

  1. Underhåller en historiktabell med resultat från tidigare iterationer.
  2. Hämtar alla rader från målfrågan.
  3. Filtrerar ut alla rader i historiktabellen
  4. Lägger till återstående resultat i historiktabellen för nästa iterationsfiltrering.

Namnet på historikarbetsytan har följande betydelse:
wkfhisto<workflowid> <activityName>_

För arbetsflödes-ID:n < 0 (för användare där xtknewid tillåter negativa sekvenser) ser vi nu att det är:

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