A Consulta Incremental seleciona todos os registros em vez de somente os novos

Saiba como corrigir o problema do Adobe Campaign Classic em que as consultas incrementais não estão funcionando como esperado.

Descrição description

Ambiente

Campaign Classic

Problema/Sintomas

Consultas incrementais não estão funcionando como esperado. Em vez de coletar apenas novos registros desde a última execução, eles estão coletando todos os registros cada vez como uma atividade de consulta normal.

Resolução resolution

Esse problema foi corrigido na versão 20.1.1 do Adobe Campaign Classic (build 9122 e posteriores).

Soluções alternativas que os usuários podem usar:

Solução alternativa 1: pare o fluxo de trabalho de limpeza e execute-o intermitentemente para limpar o Banco de Dados e o HDD até que a correção seja feita e esteja disponível. Isso não é recomendado se você não tiver uma atualização planejada.

Solução alternativa 2: suponha que a atividade de consulta incremental seja afetada. Resolva isso fazendo a mesma coisa que a consulta incremental faz criando um esquema persistente para manter o conteúdo da tabela de histórico. Use uma combinação de atividades de query e update data para imitar o comportamento. Isso precisará ser feito para todos os workflows que exigem o query incremental.

Solução alternativa 3:  Suponha que a atividade de query incremental seja afetada. Resolva isso adicionando um campo de auditoria tsCreated/tsLastModified ao esquema em questão. Sua consulta incremental será convertida em uma atividade de consulta normal com uma cláusula where como tscreated< GetDate().

Solução alternativa 4:

  1. Crie uma nova sequência xtknewworkflowid e inicialize-a com algo distante dos intervalos de workflowId atuais.
  2. Altere o esquema xtkworkflow para usar este pkSequence.
  3. Peça ao usuário para clonar todos os workflows afetados e excluir os originais.
  4. Quando o usuário estiver pronto para uma atualização, remova essa correção revertendo para xtknewId para a criação do fluxo de trabalho (para evitar surpresas indesejadas).

Causa
O principal problema é o workflow de limpeza.

O fluxo de trabalho de query incremental funciona dessa maneira:

  1. Mantém uma tabela de histórico com resultados de iterações anteriores.
  2. Busca todas as linhas da consulta de destino.
  3. Filtra todas as linhas presentes na tabela de histórico
  4. Adiciona os resultados restantes à tabela de histórico para a próxima filtragem de iteração.

O nome da tabela de trabalho do histórico é da seguinte notação:
wkfhisto<workflowid> <activityName>_

Agora, para workflowIDs < 0 (para usuários nos quais xtknewid permite sequências negativas), vemos que na verdade é:

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