支付事实的两个角色
支付事实表一支付流水一行,记录渠道、币种、金额、手续费、状态与支付、退款、清算等时间。它同时承担两个角色:对外与渠道账单逐笔对账的基准表,对内计算支付成功率、手续费成本与净收入的来源表。对账差异不覆盖事实,而是落到独立的差异表,按「本侧有渠侧无」「渠侧有本侧无」「金额不一致」分类,便于分派到具体责任方并跟踪关闭。
基本信息
| 粒度 | 一支付流水一行 |
|---|---|
| 键 | pay_id 与渠道、业务单号 |
| 度量 | 支付额、退款额、手续费 |
| 状态 | 待支付、成功、失败、已退款 |
| 对账 | 按渠道按日形成对账台账 |
典型使用场景
- 与渠道账单逐笔对账,定位长款、短款与金额差异
- 计算支付成功率与失败原因分布,反馈给产品与渠道
- 手续费成本核算:按渠道、产品线归集成本
- 净收入口径:支付额减退款额减手续费
- 结算周期核对:确认清算日与到账日是否一致
支付事实与对账
支付事实与对账
-- 支付事实:金额单位统一、状态可追溯
CREATE TABLE fact_pay (
pay_id string,
channel_sk int,
biz_order_id string COMMENT '业务订单号,便于回连',
amount_cent bigint COMMENT '支付金额,单位:分',
fee_cent bigint COMMENT '手续费,单位:分',
status string COMMENT '待支付/成功/失败/已退款',
pay_ts timestamp
) PARTITIONED BY (dt string) STORED AS ORC;
-- 渠道侧对账:按日汇总比对笔数与总额
SELECT dt, channel_sk, count(1) AS cnt, sum(amount_cent) AS amt
FROM fact_pay WHERE status = 'success' GROUP BY dt, channel_sk;字段读法
| 要素 | 作用 | 异常表现 |
|---|---|---|
| pay_id | 流水唯一键 | 重复会出现双计 |
| channel_sk | 渠道归属 | 渠道口径变更后历史对比失真 |
| amount_cent | 支付金额 | 与渠道账单币种或单位不一致 |
| fee_cent | 手续费 | 被清算值覆盖后无法审计 |
| status | 状态机 | 状态回退未记录,成功率失真 |
手续费不要用清算后的值直接覆盖原始记录:清算金额、原始费率与优惠返佣是三层信息,覆盖后成本差异的来源就再也说不清了。
对账差异表要与事实表同期分区,差异的处理结论也落库,形成可复查的对账台账,而不是停留在邮件和群聊记录里。