pipekit/config/modules/pm30200.sql
Paul Trowbridge b855ab91d7 Make the three AP history modules incremental
The Accounts Payable group ran ~9.5 min, 83% of it in four full
reloads. The cost is the GPSERVER linked-server hop, not row volume
(pm30200 managed only ~590 rows/sec), so cutting rows crossing the link
is the whole win. Predicates go inside OPENQUERY to push down to the
remote — a 4-part name would drag the table across before filtering.

  pm30200  own DEX_ROW_TS
  pm30600  changed set: parent PM30200
  pm30300  changed set: PM30200 union PM20000

All three key on (vchrnmbr, doctype), verified exactly unique in
PM30200 at 108,803/108,803. Watermark resolves off gp.pm30200 with a
7-day lookback, so run order within the group must stay pm30200 first
and the lookback must exceed the sync interval.

The two-parent union on pm30300 is load-bearing: 38 rows have a parent
only in the open table, and a PM30200-only join would strand them
permanently. pm30600 needs no union (0 orphans, verified).

pm30700 stays full — 213 of its rows have no parent in either table, so
no changed-set join can reach them, and it only costs 13s. pm20100 and
pm00400 stay full because open and index tables delete rows, which a
delete-by-key incremental structurally cannot propagate (cf. icstt).

391s -> 15s. reconcile.py --super-quick reports IN SYNC for all three.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 00:21:59 -04:00

84 lines
2.3 KiB
SQL

SELECT * FROM OPENQUERY(GPSERVER, '
SELECT
RTRIM([VCHRNMBR]) AS vchrnmbr,
RTRIM([VENDORID]) AS vendorid,
[DOCTYPE] AS doctype,
[DOCDATE] AS docdate,
RTRIM([DOCNUMBR]) AS docnumbr,
[DOCAMNT] AS docamnt,
[CURTRXAM] AS curtrxam,
[DISTKNAM] AS distknam,
[DISCAMNT] AS discamnt,
[DSCDLRAM] AS dscdlram,
RTRIM([BACHNUMB]) AS bachnumb,
RTRIM([TRXSORCE]) AS trxsorce,
RTRIM([BCHSOURC]) AS bchsourc,
[DISCDATE] AS discdate,
[DUEDATE] AS duedate,
RTRIM([PORDNMBR]) AS pordnmbr,
[TEN99AMNT] AS ten99amnt,
[WROFAMNT] AS wrofamnt,
[DISAMTAV] AS disamtav,
RTRIM([TRXDSCRN]) AS trxdscrn,
[UN1099AM] AS un1099am,
[BKTPURAM] AS bktpuram,
[BKTFRTAM] AS bktfrtam,
[BKTMSCAM] AS bktmscam,
[VOIDED] AS voided,
[HOLD] AS hold,
RTRIM([CHEKBKID]) AS chekbkid,
[DINVPDOF] AS dinvpdof,
[PPSAMDED] AS ppsamded,
[PPSTAXRT] AS ppstaxrt,
[PGRAMSBJ] AS pgramsbj,
[GSTDSAMT] AS gstdsamt,
[POSTEDDT] AS posteddt,
RTRIM([PTDUSRID]) AS ptdusrid,
[MODIFDT] AS modifdt,
RTRIM([MDFUSRID]) AS mdfusrid,
[PYENTTYP] AS pyenttyp,
RTRIM([CARDNAME]) AS cardname,
[PRCHAMNT] AS prchamnt,
[TRDISAMT] AS trdisamt,
[MSCCHAMT] AS mscchamt,
[FRTAMNT] AS frtamnt,
[TAXAMNT] AS taxamnt,
[TTLPYMTS] AS ttlpymts,
RTRIM([CURNCYID]) AS curncyid,
RTRIM([PYMTRMID]) AS pymtrmid,
RTRIM([SHIPMTHD]) AS shipmthd,
RTRIM([TAXSCHID]) AS taxschid,
RTRIM([PCHSCHID]) AS pchschid,
RTRIM([FRTSCHID]) AS frtschid,
RTRIM([MSCSCHID]) AS mscschid,
[PSTGDATE] AS pstgdate,
[DISAVTKN] AS disavtkn,
[CNTRLTYP] AS cntrltyp,
[NOTEINDX] AS noteindx,
[PRCTDISC] AS prctdisc,
[RETNAGAM] AS retnagam,
[VOIDPDATE] AS voidpdate,
[ICTRX] AS ictrx,
[Tax_Date] AS tax_date,
[PRCHDATE] AS prchdate,
[CORRCTN] AS corrctn,
[SIMPLIFD] AS simplifd,
[APLYWITH] AS aplywith,
[Electronic] AS electronic,
[ECTRX] AS ectrx,
[DocPrinted] AS docprinted,
[TaxInvReqd] AS taxinvreqd,
RTRIM([VNDCHKNM]) AS vndchknm,
[BackoutTradeDisc] AS backouttradedisc,
[CBVAT] AS cbvat,
RTRIM([VADCDTRO]) AS vadcdtro,
[TEN99TYPE] AS ten99type,
[TEN99BOXNUMBER] AS ten99boxnumber,
RTRIM([PONUMBER]) AS ponumber,
[Workflow_Status] AS workflow_status,
[DEX_ROW_TS] AS dex_row_ts,
[DEX_ROW_ID] AS dex_row_id
FROM CHG.dbo.PM30200
WHERE [DEX_ROW_TS] > ''{pm30200_ts}''
')