首页/数据/数仓建模速查/支付事实与对账基表
维度与事实设计149 条

支付事实与对账基表

支付事实一行一支付流水:渠道、金额、状态、支付/退款时间、手续费;作为与渠道账单对账的基准表,差异单独落差异表。

数仓建模速查数据更新于 2026-10-13

支付事实的两个角色

支付事实表一支付流水一行,记录渠道、币种、金额、手续费、状态与支付、退款、清算等时间。它同时承担两个角色:对外与渠道账单逐笔对账的基准表,对内计算支付成功率、手续费成本与净收入的来源表。对账差异不覆盖事实,而是落到独立的差异表,按「本侧有渠侧无」「渠侧有本侧无」「金额不一致」分类,便于分派到具体责任方并跟踪关闭。

基本信息

粒度一支付流水一行
键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状态机状态回退未记录,成功率失真
手续费不要用清算后的值直接覆盖原始记录:清算金额、原始费率与优惠返佣是三层信息,覆盖后成本差异的来源就再也说不清了。
对账差异表要与事实表同期分区,差异的处理结论也落库,形成可复查的对账台账,而不是停留在邮件和群聊记录里。

易错点

  • 手续费按清算后值覆盖,成本差异无法审计
  • 退款与原支付不关联,净额口径混乱
  • 对账差异没有分类与台账,差异长期挂着无人关闭
  • 支付失败与重试记录不区分,成功率被重复尝试稀释

数据来源与参考

  • 支付数仓实践:对账模型
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌