4. 实体解析流程:数据采集、清洗、标准化、匹配、聚合、输出

金融实体解析(Entity Resolution, ER)是将来自不同数据源、描述同一现实世界金融实体的记录进行识别、链接与合并的过程。在《金融实体解析回放对比SQL分析》课程中,理解ER的标准流程是构建回放与对比分析的基础。本章将详细拆解ER的六大核心阶段:数据采集、清洗、标准化、匹配、聚合与输出。

课程提示: 实体解析的每个阶段都会在SQL回放日志中留下关键标记。掌握这些阶段,是后续通过SQL分析解析质量、定位匹配错误的前提。

4.1 实体解析六阶段总览

下图展示了实体解析的完整流水线,从原始数据输入到最终实体输出,每个阶段都承担着特定的数据转换与决策职责。

实体解析六阶段流水线 数据采集 多源接入 数据清洗 去噪补缺 标准化 格式统一 匹配 相似度计算 聚合 实体归并 输出 结果交付 各阶段核心任务 • 数据采集:从交易系统、风控平台、客户信息库等异构源抽取原始记录。 • 数据清洗:处理缺失值、异常值、重复记录,保证数据质量基线。 • 标准化:统一日期格式、地址编码、证件类型等,消除源系统差异。 • 匹配 → 聚合 → 输出:通过相似度算法判定同一实体,合并属性,生成黄金记录。

4.2 阶段一:数据采集(Data Ingestion)

数据采集是实体解析的起点,负责从多个金融数据源中提取原始记录。在SQL回放场景中,采集阶段通常对应INSERT或SELECT INTO操作,将源表数据加载到解析工作区。

4.2.1 常见金融数据源

数据源类型 典型系统 采集方式 数据特征
核心银行系统 IBM CICS, T24 批量ETL / CDC 结构化,高一致性
交易风控平台 IBM Safer Payments 实时流式接入 高吞吐,毫秒级延迟
客户信息库 MDM, CRM API / 数据库链接 半结构化,含地址、证件
外部征信数据 央行征信、百行征信 文件交换 / Web Service 标准格式,定期更新

4.2.2 采集阶段的SQL回放标记

-- 示例:将交易流水表加载到解析临时表
INSERT INTO er_work.txn_raw
SELECT txn_id, acct_no, txn_date, amount, merchant_code
FROM source_oltp.txn_log
WHERE txn_date >= '2024-01-01';
回放分析要点: 在SQL回放日志中,采集阶段应记录source_table、row_count、load_timestamp。对比不同回放版本时,需关注数据源范围是否一致,避免因采集遗漏导致解析结果偏差。

4.3 阶段二:数据清洗(Data Cleaning)

数据清洗旨在识别并修正原始数据中的质量问题。金融数据对准确性要求极高,清洗不彻底会直接导致匹配错误或实体分裂。

4.3.1 清洗操作清单

  • 缺失值处理: 对关键字段(如身份证号、统一社会信用代码)进行空值填充或标记。
  • 异常值检测: 过滤金额为负、日期为未来时间等明显错误。
  • 重复记录去重: 在同一数据源内消除完全一致的冗余行。
  • 格式校验: 验证电话号码位数、邮箱格式、证件号码校验位。
-- 清洗示例:过滤异常交易并补全缺失的商户分类
UPDATE er_work.txn_raw
SET merchant_category = 'UNKNOWN'
WHERE merchant_category IS NULL;

DELETE FROM er_work.txn_raw
WHERE amount <= 0 OR txn_date > CURRENT_DATE;

4.4 阶段三:标准化(Standardization)

标准化将不同源系统的数据转换为统一的表示形式,消除格式异构。这是匹配阶段能够准确计算相似度的前提。

4.4.1 标准化规则示例

字段类型 源A格式 源B格式 标准化后格式
日期 2024/01/15 15-JAN-2024 2024-01-15
身份证号 110101199001011234 110101 19900101 1234 110101199001011234
电话号码 +86 138-0000-1111 13800001111 8613800001111
地址 北京市朝阳区XX路1号 北京朝阳XX路1号 北京市-朝阳区-XX路-1号
-- 标准化SQL示例:统一日期格式
UPDATE er_work.txn_std
SET txn_date_std = TO_CHAR(TO_DATE(txn_date_raw, 'YYYY/MM/DD'), 'YYYY-MM-DD')
WHERE source_system = 'SYSTEM_A';

UPDATE er_work.txn_std
SET txn_date_std = TO_CHAR(TO_DATE(txn_date_raw, 'DD-MON-YYYY'), 'YYYY-MM-DD')
WHERE source_system = 'SYSTEM_B';

4.5 阶段四:匹配(Matching)

匹配是实体解析的核心决策环节。通过计算不同记录间的相似度,判定它们是否指向同一金融实体。匹配算法通常分为确定性匹配与概率性匹配两类。

4.5.1 匹配算法对比

算法类型 原理 适用场景 SQL实现复杂度
精确匹配 字段值完全相等 唯一标识符(如身份证号) 低
编辑距离 字符串差异度量 姓名、地址模糊匹配 中(需自定义函数)
Jaro-Winkler 前缀权重编辑距离 短字符串(人名、机构名) 中
TF-IDF + 余弦相似度 词频向量空间相似度 长文本(地址、公司描述) 高
-- 匹配阶段SQL示例:基于身份证号精确匹配候选对
SELECT a.record_id AS left_id,
       b.record_id AS right_id,
       'ID_CARD_EXACT' AS match_rule,
       1.0 AS similarity_score
FROM er_work.txn_std a
JOIN er_work.txn_std b
  ON a.id_card = b.id_card
WHERE a.source_system < b.source_system;  -- 避免重复对
匹配陷阱: 仅依赖单一字段匹配可能导致高误报率。金融实体解析通常采用多字段加权投票策略,例如:身份证号匹配权重0.6,姓名匹配权重0.3,出生日期匹配权重0.1。SQL回放分析中,需记录每条匹配规则的贡献度。

4.6 阶段五:聚合(Aggregation / Entity Merging)

聚合阶段将匹配环节识别出的同一实体下的多条记录合并为一条“黄金记录”(Golden Record)。合并策略包括属性选择、冲突解决与历史追溯。

4.6.1 聚合策略

  • 最新值优先: 取时间戳最近的记录值。
  • 高置信度源优先: 核心银行系统数据优先级高于外部数据。
  • 字段级投票: 多个源中取值最多的值作为最终值。
  • 保留历史快照: 聚合后的实体需关联原始记录ID,支持回放追溯。
-- 聚合示例:合并同一实体的地址信息,取最新非空值
INSERT INTO er_work.entity_golden (entity_id, address, updated_at)
SELECT entity_id,
       COALESCE(
         MAX(CASE WHEN source_rank = 1 THEN address END),
         MAX(CASE WHEN source_rank = 2 THEN address END)
       ) AS best_address,
       MAX(updated_at)
FROM er_work.entity_candidates
GROUP BY entity_id;

4.7 阶段六:输出(Output)

输出阶段将聚合后的实体结果交付给下游系统,同时生成解析日志供后续回放对比分析使用。输出格式通常包括实体宽表、增量变更流以及解析质量报告。

4.7.1 输出产物清单

输出类型 内容 消费方 回放分析价值
实体黄金表 每个实体的最终属性 风控系统、CRM 对比不同版本实体属性变化
匹配对明细表 所有匹配记录对及相似度 数据治理团队 分析匹配规则准确率
解析统计报告 实体数、匹配率、聚合冲突数 管理层、审计 评估解析整体质量
回放日志表 每个阶段的SQL操作与影响行数 SQL分析平台 定位解析差异根因
-- 输出示例:将解析结果写入最终实体表
INSERT INTO dwd.entity_golden_final
SELECT entity_id, entity_name, id_card, address, phone,
       CURRENT_TIMESTAMP AS etl_time
FROM er_work.entity_golden;

4.8 六阶段数据流转关系图

下图以数据视角展示各阶段之间的输入输出关系,突出每个阶段对数据形态的转换作用。

实体解析数据流转与阶段输入输出 原始记录 清洗后记录 标准化向量 匹配对集合 实体簇 黄金记录 采集 清洗 标准化 匹配 聚合 输出 数据流转核心:每个阶段接收上一阶段输出,经过转换后生成新的数据形态,最终形成可用于分析的黄金记录。 SQL回放日志需记录每个阶段的数据量变化(输入行数 → 输出行数),用于质量监控。

4.9 各阶段在SQL回放中的关键字段

为了支持后续的“回放对比”分析,每个阶段在日志表中都应记录以下关键元数据字段:

阶段 日志表关键字段 对比分析用途
采集 source_system, batch_id, row_count 检查数据源范围与加载量是否一致
清洗 cleaning_rule, rows_affected, error_type 对比清洗规则执行差异
标准化 field_name, before_value, after_value 定位标准化规则变更导致的匹配差异
匹配 match_rule, similarity_score, pair_count 分析匹配阈值调整对结果的影响
聚合 entity_id, merged_record_ids, conflict_field 追溯实体合并过程中的冲突解决策略
输出 output_table, entity_count, output_timestamp 验证最终结果是否完整交付