2. 风控数据源与SQL基础回顾

风控数据分析的起点是理解数据从哪里来、长什么样,以及如何用SQL高效、安全地操作这些数据。本章将系统梳理风控领域最常见的三类数据源,回顾SQL核心语法,并建立一套风控场景下的SQL编写规范,为后续的质量监控打下坚实基础。

2.1 常见风控数据源

风控模型与规则引擎依赖的数据主要来自内部业务系统、第三方合作机构以及历史积累的标签库。按用途可归纳为以下三大类:

数据源类型 典型表/接口 核心字段示例 风控用途
用户画像 user_profile, user_tag user_id, age, gender, occupation, credit_level, registration_days 身份核验、信用评分、群体划分
交易流水 transaction_log, payment_order trans_id, user_id, amount, trans_time, merchant_id, trans_type, ip_address 异常交易检测、欺诈模式识别、额度管控
黑名单 blacklist, risk_device, fraud_ip id_type, id_value, list_type, source, create_time, expire_time 拦截已知风险实体、设备指纹匹配
实践要点:风控数据源通常具有高敏感性和时效性。用户画像中的标签可能涉及隐私,交易流水需要精确到秒级时间戳,黑名单则必须支持快速过期与增量更新。在SQL查询中,务必对敏感字段进行脱敏处理,并对时间窗口条件做索引优化。
风控数据源体系与SQL操作映射 用户画像 user_profile / user_tag 交易流水 transaction_log 黑名单 blacklist / fraud_ip SQL 操作:SELECT / JOIN / WHERE / GROUP BY / 窗口函数 风控特征 / 规则命中 / 监控指标 数据源质量直接影响风控效果,SQL 是连接原始数据与风控决策的核心桥梁

2.2 SQL基础语法回顾

风控SQL开发中,以下语法是最高频使用的核心子集。掌握它们能覆盖90%以上的日常数据提取与质量校验需求。

2.2.1 数据查询与过滤

-- 基础查询:用户画像表,筛选高信用等级用户
SELECT user_id, credit_level, registration_days
FROM user_profile
WHERE credit_level >= 4
  AND registration_days > 30
ORDER BY credit_level DESC;

2.2.2 多表关联与聚合

-- 关联交易流水与黑名单,统计命中黑名单的交易笔数与金额
SELECT b.list_type,
       COUNT(t.trans_id) AS hit_count,
       ROUND(SUM(t.amount), 2) AS total_amount
FROM transaction_log t
INNER JOIN blacklist b
  ON t.user_id = b.id_value
WHERE t.trans_time >= '2025-01-01'
  AND b.expire_time > NOW()
GROUP BY b.list_type
HAVING COUNT(t.trans_id) > 0;

2.2.3 窗口函数与排名

-- 对每个用户按交易金额降序排名,取前3笔大额交易
SELECT user_id, trans_id, amount,
       ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY amount DESC) AS rn
FROM transaction_log
QUALIFY rn <= 3;  -- 部分引擎支持 QUALIFY 语法
常见陷阱:风控场景中,JOIN 条件遗漏索引字段会导致全表扫描,影响实时监控性能。另外,GROUP BY 与 HAVING 的过滤顺序容易混淆——WHERE 在聚合前过滤行,HAVING 在聚合后过滤组,务必区分使用。

2.3 风控SQL编写规范

为了保障数据质量、查询性能和团队协作效率,风控SQL必须遵循统一的编写规范。以下规范将贯穿本课程所有实战案例。

规范类别 具体要求 示例/反例
命名规范 表名使用小写+下划线;字段名清晰表达业务含义;临时表加 tmp_ 前缀 ✅ user_profile ❌ UserProfile
注释规范 每个查询块顶部写清目的;复杂逻辑逐行注释;标注作者与最后修改日期 ✅ -- 提取近7天命中黑名单的交易
性能规范 WHERE 条件中避免函数包裹索引字段;JOIN 键必须建索引;限制 SELECT * 的使用 ✅ WHERE trans_time >= '2025-01-01' ❌ WHERE DATE(trans_time) = '2025-01-01'
安全规范 敏感字段(手机号、身份证)查询后立即脱敏;禁止将生产数据直接导出到本地 ✅ CONCAT(LEFT(phone,3), '****', RIGHT(phone,4))
可读性规范 关键字大写;子查询缩进对齐;长SQL按逻辑分块空行 ✅ SELECT ... FROM ... WHERE ... 统一大写
风控SQL编写规范五维模型 风控SQL 编写规范 命名规范 注释规范 性能规范 安全规范 可读性规范
规范落地建议:建议团队在代码仓库中维护一份 .sqlfluff 或 SQL_Lint 配置文件,将上述规范固化为自动化检查规则。每次提交SQL前,通过CI流水线自动校验命名、注释、性能和安全规则,从源头拦截低质量代码进入生产环境。