3. 数据源与数据仓库:常见金融数据源与实体表设计

金融实体解析的底层依赖是高质量、多源的数据。本章聚焦金融领域常见的数据源类型、数据仓库分层架构以及核心实体表的设计原则,为后续的 SQL 回放对比分析奠定数据基础。

3.1 常见金融数据源

金融业务系统通常按职能划分为交易、风控、CRM 三大核心域,各域数据特征差异显著。

数据域 典型系统 数据特征 更新频率 实体解析关注点
交易 核心银行、证券交易、支付网关 高并发、强事务、流水明细 实时/准实时 交易对手方识别、账户关联
风控 反欺诈、信用评估、合规筛查 多维度、标签化、黑白名单 准实时/批量 黑名单实体、关联风险图谱
CRM 客户关系管理、营销平台 主数据、分层、画像标签 批量(T+1) 客户统一视图、集团关系
数据源对齐提示: 在实体解析回放场景中,交易数据提供“行为证据”,CRM 提供“身份基准”,风控数据提供“风险标记”。三者缺一不可。

3.2 数据仓库分层架构(ODS/DWD/DWS/ADS)

金融数据仓库通常采用四层标准分层,每一层承担不同的数据加工与实体解析职责。

  1. ODS(操作数据存储层): 直接贴源,保留业务系统原始快照,不做或少做清洗。用于回放原始交易流水。
  2. DWD(明细数据层): 对 ODS 数据进行标准化、去重、字段补齐,形成干净的明细事实表。实体 ID 在此层完成初步映射。
  3. DWS(汇总数据层): 按实体维度(客户、账户、产品)进行轻度汇总,生成宽表。用于实体画像与聚合分析。
  4. ADS(应用数据层): 面向具体业务需求(如实体解析对比报表)构建的集市表,直接支撑 SQL 回放分析。
数据仓库分层架构与实体解析映射 ODS 操作数据存储 原始交易流水 / 贴源快照 DWD 明细数据层 标准化 / 去重 / 实体 ID 映射 DWS 汇总数据层 实体宽表 / 轻度聚合 ADS 应用数据层 对比集市 / 回放报表 原始实体记录 多源异构 ID 集合 实体解析引擎 匹配 / 合并 / 消歧 统一实体 ID Golden ID / 全局标识 实体对比结果 回放差异 / 匹配率 ODS → DWD:实体 ID 首次标准化 DWS → ADS:实体对比结果输出 实体解析引擎跨层迭代 回放对比依赖 DWD + ADS

3.3 核心实体表设计

实体表是数据仓库中描述业务对象的“骨架”。在金融场景中,以下三类实体表最为关键:

3.3.1 客户实体表(Customer Entity Table)

  • 主键: customer_id(统一客户标识)
  • 核心字段: 证件类型、证件号码、客户名称、手机号、邮箱、地址、客户层级、开户日期
  • 实体解析字段: golden_id(全局唯一 ID)、match_rule_id(匹配规则编号)、merge_status(合并状态)

3.3.2 账户实体表(Account Entity Table)

  • 主键: account_id
  • 核心字段: 账户类型、币种、余额、开户机构、状态
  • 实体解析字段: customer_id(所属客户)、account_group_id(账户组标识)、is_primary(是否主账户)

3.3.3 交易实体表(Transaction Entity Table)

  • 主键: transaction_id
  • 核心字段: 交易金额、交易时间、交易渠道、交易类型、对手方信息
  • 实体解析字段: from_entity_id(发起方实体)、to_entity_id(接收方实体)、txn_entity_link(交易实体关联)
设计要点: 实体表必须保留“解析链路字段”(如 match_rule_id、merge_version),以便在回放对比时追溯每次实体匹配的依据和变更历史。

3.4 实体表设计示例 SQL

以下为 DWD 层客户实体表的建表语句示例,包含实体解析专用字段:

CREATE TABLE dwd_customer_entity (
    customer_id      STRING      COMMENT '统一客户标识',
    id_type          STRING      COMMENT '证件类型',
    id_number        STRING      COMMENT '证件号码',
    customer_name    STRING      COMMENT '客户名称',
    mobile_phone     STRING      COMMENT '手机号',
    email            STRING      COMMENT '邮箱',
    golden_id        STRING      COMMENT '全局统一实体ID',
    match_rule_id    STRING      COMMENT '匹配规则编号',
    merge_status     STRING      COMMENT '合并状态: 0-未合并, 1-主实体, 2-从实体',
    merge_version    INT         COMMENT '合并版本号,用于回放对比',
    etl_time         TIMESTAMP   COMMENT 'ETL处理时间'
)
PARTITIONED BY (dt STRING COMMENT '数据日期分区')
STORED AS ORC
TBLPROPERTIES ('transactional'='true');
回放对比关键字段: merge_version 和 match_rule_id 是回放分析的核心。每次实体解析规则变更或数据重跑时,版本号递增,SQL 回放通过对比不同版本的实体关联结果来评估解析效果。

3.5 实体解析回放的数据依赖关系

回放对比分析需要从多个分层中提取数据,其依赖关系如下:

实体解析回放数据依赖关系 ODS 原始流水 交易 / 客户快照 DWD 明细实体 标准化实体表 DWS 实体宽表 聚合画像数据 实体解析回放 对比分析引擎 版本差异 / 匹配率 规则效果评估 ADS 对比集市 回放报表 / 看板

3.6 实体表设计避坑清单

常见问题 后果 正确做法
缺少 golden_id 字段 无法跨系统关联实体 每张实体表保留统一实体标识
未记录 merge_version 回放无法追溯版本变化 每次规则变更递增版本号
实体表与事实表无外键约束 数据一致性差 在 DWD 层建立实体 ID 外键关联
忽略历史快照 无法回放历史状态 ODS 层保留全量历史快照
最佳实践: 在 DWD 层实体表中增加 batch_id 和 rule_version 字段,配合分区字段 dt,可以精确回放到任意时间点的实体解析结果,是 SQL 回放对比分析的基础保障。