DW-PLATFORM · DOCS · 数据提取模块

数据提取模块分析

本套文档基于代码库静态分析(master 分支,2026-09-03),拆解「数据提取」模块的两条核心链路:规则管理如何把圈选规则变成一次提数任务,以及人群包从创建、生成、去重到推送的完整生命周期。所有节点均标注对应的服务模块、类名与行号。

导读 规则与人群包总览 提数执行方详解 人群包拆包详解 人群包去重详解

阅读路径

规则与人群包总览
面向全链路的读者。包含:总体架构与四个服务的分工、规则数据模型(rule_condition 四种形态)、提数主流程与分流、回调处理与 pullStatus/pushStatus 状态机、人群包生命周期(六个创建入口 → 运营操作 → 推送)、Redis 排队与重试等关键机制。
6 章 · 8 图 →
提数执行方详解
面向需要读懂执行细节的读者。包含:编排层 project 资源池与三个 Redis Key、*/5s 守护循环(FIFO 补位 + 2h 超时)、自建 datapick-service 主循环(SQL 拼装 → 游标分页 → 解密 → 文件匹配 → 布隆去重 → CSV → FTP → 回调)、Azkaban 五步对接、distinctByTag 标签去重,以及 11 项源码级风险清单。
3 章 · 4 图 →
人群包拆包详解
面向需要理解拆包/切包的读者。包含:业务切包与物理拆分两种语义的区分、切包的三个触发入口(运营手动 / 精准回调联动 / 定时任务推送)、isNewPackageLine 行级判定引擎与五种切分方式(数量 / 城市 / 机型 / 按列 / 多列组合)、asyncCutPackage 削苹果模型全流程、定时任务快照缓存、90MB/500 万行物理拆分,以及 11 项源码级风险清单。
7 章 · 6 图 →
人群包去重详解
面向需要理解去重的读者。包含:三条独立去重链路的区分(组合去重原地削 / 按类型剔除产生新包 / 标签去重生成时自动)、内存二分查找算法、PackageDistinctManager 与提数编排层的同构队列、ExternalSortUtil 外部排序三步(分块排序 → 归并去重 → 双指针过滤)、datapick-service 标签比对时序、回调分流信号,以及 11 项源码级风险清单。
7 章 · 4 图 →

一句话总览

规则(callout_package_rule)是圈选条件的载体;点击「生成人群包」后,核心服务把规则注入 PickDataConditionBO,经 PickDataManager 排队分流——命中 dataPick.quotaCodes 的数据源(如 user_info)走自建 dw-platform-datapick-service 直连 MySQL 提数,其余走 Azkaban 大数据平台;执行方把结果 CSV 上传 FTP 并回调 /api/package/callback,核心服务据此更新人群包(callout_package_task)的 pullStatus,后续再经去重、切包、推送触达下游。

快速定位

想了解…去哪看
一次提数经过哪些服务总览 · 01 章 · 图 1
规则的圈选条件长什么样总览 · 02 章 · 图 2/3
点「生成人群包」之后发生了什么总览 · 03 章 · 图 4
人群包为什么卡在某个状态总览 · 04 章 · 图 5;详解 · 守护循环与重试
人群包有哪些创建入口、如何推送总览 · 05 章 · 图 7/8
SQL 是怎么拼出来的、去重怎么做的详解 · 路径 A · 图 11
Azkaban 平台如何被调用详解 · 路径 B · 图 12
人群包怎么被切成分包、切分条件怎么判定拆包 · 12 章 · 图 15
精准系统订购的人群怎么按数量切包拆包 · 11 章 · 入口②
推送前大文件怎么拆分片拆包 · 15 章 · 物理拆分
两个包怎么互相去重、本地去重怎么跑去重 · 17-20 章 · 图 19/20/21
生成时自动剔除已触达人群是怎么回事去重 · 21 章 · 图 22
代码里有哪些坑详解 · 09 风险清单 · 拆包 · 16 · 去重 · 23 风险清单