Die inkrementelle Abfrage erfasst alle Datensätze anstelle von nur neuen

Erfahren Sie, wie Sie das Adobe Campaign Classic-Problem beheben, dass inkrementelle Abfragen nicht wie erwartet funktionieren.

Beschreibung description

Umgebung

Campaign Classic

Problem/Symptome

Inkrementelle Abfragen funktionieren nicht erwartungsgemäß. Anstatt seit der letzten Ausführung nur neue Datensätze zu erfassen, erfassen sie jedes Mal alle Datensätze wie eine normale Abfrageaktivität.

Auflösung resolution

Dieses Problem wurde in Adobe Campaign Classic Version 20.1.1 (Build 9122 und höher) behoben.

Problemumgehungen, die Benutzer verwenden können:

Problemumgehung 1: Halten Sie den Bereinigungs-Workflow an und führen Sie ihn gelegentlich aus, um Datenbank und Festplatte zu bereinigen, bis die Fehlerbehebung abgeschlossen und verfügbar ist. Dies wird nicht empfohlen, wenn Sie kein Upgrade planen.

Problemumgehung 2: Angenommen, die inkrementelle Abfrageaktivität ist betroffen. Umgehen Sie das Problem, indem Sie dieselbe Aktion durchführen wie die inkrementelle Abfrage, indem Sie ein persistentes Schema zum Speichern der Verlaufstabelleninhalte erstellen. Verwenden Sie eine Kombination aus Abfrage- und Aktualisierungsdatenaktivitäten, um das Verhalten nachzuahmen. Dies muss für alle Workflows erfolgen, für die die inkrementelle Abfrage erforderlich ist.

Abhilfe 3:  Angenommen, die Aktivität Inkrementelle Abfrage ist betroffen. Umgehen Sie das Problem, indem Sie dem betreffenden Schema eine tsCreated/tsLastModified hinzufügen. Ihre inkrementelle Abfrage wird dann in eine normale Abfrageaktivität mit einer Where-Klausel wie tscreated< GetDate() konvertiert.

Workaround 4:

  1. Erstellen Sie eine neue Sequenz xtknewworkflowid und initialisieren Sie sie in einer Weise, die weit von den aktuellen workflowId-Bereichen entfernt ist.
  2. Ändern Sie das xtkworkflow Schema, um diese pkSequence zu verwenden.
  3. Bitten Sie den Benutzer, alle betroffenen Workflows zu klonen und die ursprünglichen zu löschen.
  4. Sobald die Benutzerin bzw. der Benutzer für ein Upgrade bereit ist, entfernen Sie diese Fehlerbehebung, indem Sie für die Workflow-Erstellung auf xtknewId zurücksetzen (um unerwünschte Überraschungen zu vermeiden).

Ursache
Das Hauptproblem ist der Bereinigungs-Workflow.

Der inkrementelle Abfrage-Workflow funktioniert wie folgt:

  1. Verwaltet eine Verlaufstabelle mit Ergebnissen aus vorherigen Iterationen.
  2. Ruft alle Zeilen aus der Zielabfrage ab.
  3. Filtert alle in der Verlaufstabelle vorhandenen Zeilen heraus
  4. Fügt die verbleibenden Ergebnisse der Verlaufstabelle für die nächste Iterationsfilterung hinzu.

Der Name der Verlaufs-Arbeitstabelle hat die folgende Notation:
wkfhisto<workflowid> <activityName>_

Für workflowIDs < 0 (für Benutzer, bei denen die xtknewid negative Sequenzen zulässt) sehen wir, dass es tatsächlich:

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