증분 쿼리는 새 레코드만 선택하는 대신 모든 레코드를 선택합니다.
증분 쿼리가 예상대로 작동하지 않는 Adobe Campaign Classic 문제를 해결하는 방법에 대해 알아봅니다.
설명 description
환경
Campaign Classic
문제/증상
증분 쿼리가 예상대로 작동하지 않습니다. 마지막 실행 이후 새 레코드만 선택하는 대신 일반적인 쿼리 활동처럼 매번 모든 레코드를 선택합니다.
해결 방법 resolution
이 문제는 Adobe Campaign Classic 20.1.1 릴리스(빌드 9122 이상)에서 해결되었습니다.
사용자가 사용할 수 있는 해결 방법:
해결 방법 1: 정리 워크플로우를 중지하고 간헐적으로 실행하여 수정 사항을 적용하고 사용할 수 있을 때까지 데이터베이스 및 HDD를 정리합니다. 계획된 업그레이드가 없는 경우에는 권장되지 않습니다.
해결 방법 2: 증분 쿼리 활동이 영향을 받는다고 가정합니다. 기록 테이블 컨텐츠를 보관할 영구 스키마를 만들어 증분 쿼리가 수행하는 것과 동일한 작업을 수행하여 이 문제를 해결합니다. 쿼리 및 업데이트 데이터 활동을 조합하여 동작을 모방하십시오. 증분 쿼리가 필요한 모든 워크플로우에 대해 이 작업을 수행해야 합니다.
해결 방법 3: 증분 쿼리 활동이 영향을 받는다고 가정합니다. 해당 스키마에 감사 필드 tsCreated/tsLastModified을(를) 추가하여 문제를 해결합니다. 그런 다음 증분 쿼리가 tscreated< GetDate()과(와) 같은 where 절을 사용하는 일반 쿼리 활동으로 변환됩니다.
해결 방법 4:
- 새 시퀀스
xtknewworkflowid을(를) 만들고 현재 workflowId 범위로부터 떨어진 위치로 초기화합니다. - 이
pkSequence을(를) 사용하도록xtkworkflow스키마를 변경하십시오. - 사용자에게 영향을 받는 모든 워크플로우를 복제하고 원래 워크플로우를 삭제하도록 요청합니다.
- 사용자가 업그레이드할 준비가 되면 워크플로 생성을 위해
xtknewId(으)로 되돌려 이 수정 사항을 제거하십시오(원치 않는 예기치 않은 오류가 발생하지 않도록 함).
원인
주요 문제는 정리 워크플로우입니다.
증분 쿼리 워크플로우는 다음 방식으로 작동합니다.
- 이전 반복 결과를 사용하여 기록 테이블을 유지합니다.
- 대상 쿼리에서 모든 행을 가져옵니다.
- 기록 테이블에 있는 모든 행을 필터링합니다.
- 나머지 결과를 다음 반복 필터링을 위해 기록 테이블에 추가합니다.
기록 작업 테이블 이름은 다음 표기법으로 되어 있습니다.wkfhisto<workflowid> <activityName>_
이제 workflowID < 0(xtknewid에서 음수 시퀀스를 허용하는 사용자)의 경우 실제로 다음과 같습니다.
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.