本章目标:说清数据开发每天在做什么、和数据分析/后端有什么区别,并能画出一条电商数据从下单到报表的完整链路。 前置知识:无。 预计用时:40–60 分钟。
1. 为什么需要它
你在购物 App 下了一单,这个动作几百毫秒就完成了。但第二天早上,运营要在看板上看到昨天的成交额、下单人数、品类排名;老板要看到本月和上月的对比;财务要核对支付金额和订单金额。
这些数字不会自己出现。业务库里的数据是给程序用的,格式乱、有重复、有取消单。必须有人把数据采集、清洗、汇总、按时产出,变成可信的报表。这个工作就是数据开发。
所以数据开发的核心是三件事:
- 理解业务问题,知道该算什么指标、口径是什么。
- 把问题翻译成 SQL 或数据处理程序。
- 让流程每天稳定运行,出问题时能定位、能补数。
本章不要求你装环境、写代码,只要求你建立一张“全景地图”。后面的每章都是在这张地图上填细节。
2. 核心概念
2.1 岗位地图
招聘网站上的岗位名称很多,但实习阶段常见的就是下面四类。很多公司会把它们合并成一个“数据开发”岗位。
| 方向 | 主要做什么 | 典型产出物 | 核心技术 |
|---|---|---|---|
| 数仓开发 | 设计 ODS/DWD/DWS/ADS 分层,建事实表、维度表,做指标汇总 | 数仓表、建表语句、指标口径文档 | SQL、Hive/Spark、维度建模、调度 |
| ETL 开发 | 把业务库、日志、第三方接口的数据同步进来并清洗 | 同步任务、清洗脚本、数据质量报告 | SQL、Python/Java、DataX/Sqoop、调度 |
| 实时开发 | 处理订单、点击、支付等实时流,产出分钟级指标 | 实时任务、Kafka topic、实时看板 | Kafka、Flink、Spark Structured Streaming |
| 数据平台 | 给数据开发和分析师提供工具与基础设施 | 元数据系统、调度平台、权限系统、查询平台 | Java/Python、Linux、服务端、OLAP |
零基础阶段的优先级很明确:先数仓开发,再了解实时开发,数据平台只做概念了解。数仓开发的 SQL 和建模能力,是另外三个方向的共同底座。
2.2 日常工作和产出物
数据开发的一天通常不是“从早写到晚的 SQL”,而是下面这些事情的组合:
| 场景 | 具体动作 | 产出 |
|---|---|---|
| 需求评审 | 和运营/产品确认“复购率”到底按人还是按单算,时间范围是什么 | 指标口径一句话 + 验收标准 |
| 建表开发 | 写 DDL、写 INSERT、处理空值和重复值 | 可重复执行的 SQL 脚本 |
| 调度配置 | 配置依赖:订单明细跑完才能跑 GMV 汇总 | 一条 DAG,每天定时触发 |
| 数据对账 | 和业务库、上游表、历史趋势对比,确认数字没异常 | 对账记录、异常说明 |
| 故障处理 | 任务失败、数据延迟、指标突增,定位是哪张表、哪一步 | 修复记录、补数方案 |
| 文档维护 | 表说明、字段说明、指标口径、血缘关系 | 数据字典、README |
注意最后两项。让任务稳定运行、让别人看懂你的表占了很大一部分工作量。面试时能说出“我会对账、会写数据字典、知道补数要幂等”,比单纯背函数更加分。
2.3 数据开发 vs 数据分析 vs 后端开发
三个岗位都碰数据,但解决的是不同问题。用同一笔订单举例:
- 后端开发:保证用户点击“提交订单”后,订单能正确写进数据库,支付能回调,库存能扣减。
- 数据分析:拿到已经整理好的数据,分析为什么本月销量下降、哪类用户更容易复购。
- 数据开发:把订单、支付、商品、用户数据整合成一张可信的宽表,让分析师和报表能直接查。
| 维度 | 数据开发 | 数据分析 | 后端开发 |
|---|---|---|---|
| 核心问题 | 数据怎么稳定、准确地算出来 | 数据说明了什么、业务该怎么做 | 业务功能怎么正确、高并发地运行 |
| 主要产出 | 数仓表、ETL 任务、指标数据 | 分析报告、结论、实验评估 | 接口、服务、数据库表 |
| 常用工具 | SQL、Hive/Spark、调度、Kafka/Flink | SQL、Excel、Python、BI 工具 | Java/Go/Python、MySQL、Redis |
| 成功标准 | 数据准时、准确、可追溯 | 结论能指导业务决策 | 系统稳定、接口快、数据不丢 |
| 实习面试重点 | SQL、数仓分层、项目细节、排错 | SQL、业务 sense、分析框架 | 语言基础、计算机基础、项目 |
现实中边界会模糊:小公司的数据开发也要做分析,分析师也要写 ETL。但面试时你要能说清你的岗位主线是把数据工程化,而不是只出分析结论。
2.4 技术栈全景
下面这张表是数据开发的技术栈地图。不要被吓到:实习阶段真正要求的是前四行,后面几行先做到“讲得清”。
| 层次 | 技术 | 解决什么问题 | 你要学到什么程度 |
|---|---|---|---|
| 操作系统 | Linux、Shell | 在服务器上找文件、看日志、跑脚本、排查任务 | 常用命令 + 能写简单脚本 |
| 查询语言 | SQL | 取数、关联、聚合、窗口计算 | 手写常见查询,能解释执行顺序 |
| 数据建模 | 维度建模、数仓分层 | 表怎么组织,指标放在哪一层 | 能画出 ODS/DWD/DWS/ADS |
| 离线计算 | Hive、Spark SQL、PySpark | 处理百万到 PB 级数据 | 会写分区表 DDL、会跑 Spark SQL |
| 实时链路 | Kafka、Flink | 处理持续产生的订单/日志流 | 懂 topic/partition/offset、窗口、水位线 |
| 任务调度 | Airflow、DolphinScheduler、DataWorks | 按依赖和时间自动跑任务 | 懂 DAG、依赖、补数、幂等 |
| OLAP 查询 | ClickHouse、Doris、StarRocks | 让报表查询在秒级返回 | 知道适用场景,不要求调优 |
| 开发语言 | Python | 写清洗脚本、调 API、跑 PySpark | 会基础语法和 pandas 常用操作 |
一个常见误区是“先把 Hadoop 生态全部学一遍再找工作”。实习面试不会让你现场搭集群,更不会问 YARN 参数怎么调。先把 SQL 和数仓项目做扎实,再用概念课补齐 Hive/Kafka/Flink,性价比最高。
2.5 一个电商数据从产生到报表的完整链路
下面是一条典型的离线链路。先看整体,再逐个环节理解。
用户下单 / 浏览 / 支付
│
▼
业务库 MySQL
(orders, order_items, payments, customers ...)
│
│ 采集:定时同步 / CDC / 日志上报
▼
ODS 原始层(贴源)
原样保留,按天分区,不修改业务字段
│
│ 清洗:去重、去负价、过滤取消单和未来日期、关联维表
▼
DWD 明细层
一行 = 一个订单明细,字段已经统一、可信
│
│ 汇总:按用户、商品、品类、日期等粒度聚合
▼
DWS 汇总层
每个用户每天的下单次数、每个品类的每日 GMV
│
│ 面向场景:排名、同比环比、复购率、看板指标
▼
ADS 应用层
一张表直接对应一个报表或一个接口
│
▼
BI 看板 / 运营报表 / 数据 API
调度系统(Airflow / DolphinScheduler)贯穿全流程:
按 DAG 依赖依次触发,失败告警,支持按天补数。
实时支线:
业务库 binlog → Kafka → Flink → OLAP / 实时大屏
(延迟从小时级降到秒级,但链路更复杂,实习阶段先懂概念)
常见问题:采集阶段会有同步延迟和重复抽取;清洗阶段要处理空值、重复行、负价、未来日期;汇总阶段最容易选错粒度、重复计数;应用阶段要对账指标、控制查询性能;调度阶段要防止依赖漏配和重跑不幂等。
记住一句话:ODS 尽量原样,DWD 负责干净,DWS 负责聚合,ADS 负责好用。
2.6 面试要求和三层边界
招聘 JD 写“熟悉 Hive/Spark/Flink”,实习岗的真实要求可以拆成三层:
| 层次 | 要求 | 怎么验证 | 时间占比 |
|---|---|---|---|
| 讲得清 | 知道它是干嘛的、在链路哪个位置、解决什么问题 | 对着白纸讲 2 分钟不卡 | 约 60% |
| 写得对 | 能写出 Hive 风格 DDL、Spark SQL、简单实时 demo | 代码能跑出正确结果 | 约 30% |
| 调得动 | 参数调优、集群运维、源码原理 | 生产环境经验 | 实习阶段不要求 |
“讲得清”不是背定义。比如问 Hive 分区,你要能说出:分区字段在表目录下形成子目录,查询时带上分区条件可以只扫一个目录,这就是分区裁剪;分区字段不能和表字段重名;按天分区后补数可以用 INSERT OVERWRITE 覆盖某一天。
“写得对”要求你能独立写出:带分区的建表语句、GROUP BY 聚合、多表 JOIN、窗口函数排名、空值处理。写完后还要能对账,知道结果大概是多少。
“调得动”不是零基础的第一目标。诚实地说“了解原理,未在生产环境调过参”,比硬背一堆参数更安全。面试官更在意你能不能把做过的事情讲透。
2.7 零基础常见误区与学习法
| 误区 | 为什么错 | 正确做法 |
|---|---|---|
| 收藏一堆教程就等于学会 | 收藏不产生肌肉记忆,面试一写就卡 | 每学一个语法,立刻手敲并改一个条件 |
| 先啃 Hadoop 源码和集群搭建 | 实习面试几乎不问,时间成本极高 | 先用 DuckDB 把 SQL 练熟,再补 Hive 概念 |
| SQL 只看不写 | 看懂和写出来是两种能力 | 同一道题先自己写,再对照标准答案 |
| 追求最新框架 | 框架会变,SQL 和建模不会 | 把 SQL、数仓分层、项目对账做到能讲 |
| 只关心“跑通” | 跑通不代表结果对 | 每次查询都先猜行数和量级,再核对 |
| 把数据分析当数据开发 | 报告写得好不等于数据链路能落地 | 主动讲清你做的表、任务、对账和补数 |
推荐的学习方法是三遍法:
- 读一遍:快速读完一章,只求知道这章解决什么问题,不纠结细节。
- 跟敲:关掉答案,照着题目自己敲。报错就完整读报错信息,定位到行号和字段名。
- 脱稿:合上教程,用自己的话写出核心 SQL 或画出链路,再和教程对比。能脱稿写出来,才算真正掌握。
每章的练习就是按这个节奏设计的。先做,再看折叠答案。
3. 动手示例
3.1 看一眼“原始数据”长什么样
本章不要求写 SQL,先看看数据开发每天面对的原始表格。项目里有一张 12 行的示例订单表:
data/sample/orders_demo.csv
先用 Git Bash 看前 5 行:
head -n 5 data/sample/orders_demo.csv
再统计每种订单状态各有多少行:
tail -n +2 data/sample/orders_demo.csv | cut -d, -f2 | sort | uniq -c | sort -nr
你会看到 paid 8 行、canceled 2 行、shipped 1 行、unavailable 1 行。
这段小输出就是数据开发的日常缩影:
- 原始表:CSV 里既有正常订单,也有取消和不可用订单,对应 ODS 贴源层。
- 清洗规则:算销售额时要不要排除
canceled,就是口径问题,对应 DWD 明细层。 - 指标验收:按城市、按月汇总后,要能解释数字怎么来的,对应 DWS/ADS 层。
注意:空值不一定是脏数据。未送达订单没有签收时间、新用户没有历史订单,都是业务事实;只有“状态已完成却缺关键时间”这类矛盾才是缺陷。把业务空值和质量缺陷区分开,是数据开发的基本功。
真实项目会把这套过程放大到 8 张表、55 万行。等你开始项目 00 章,会重新准备数据并跑完整体检;这里只要先建立“原始数据 → 清洗 → 指标”的直觉。
4. 常见坑
| 坑 | 表现 | 处理 |
|---|---|---|
| 把工具当目标 | 一直在比较 Spark 和 Flink 谁更强,SQL 却写不熟 | 先问“这个工具在链路哪一步、解决什么问题” |
| 忽略数据口径 | 两个人算出的 GMV 不一样,争执不下 | 把过滤条件、分母、含不含运费写进文档 |
| 把空值一律当脏数据 | 删掉了未送达订单的 delivery_date |
先问业务含义,再决定是否清洗 |
| 只看结果不核对 | SQL 跑通了就交差,数字差十倍 | 先查上游表行数,再做指标对账 |
5. 练习
练习 1:画出链路并标层
不看本章的图,在白纸上画出“用户下单 → 报表”的链路,至少标出业务库、ODS、DWD、DWS、ADS 五个位置,并写出每个位置的一句话职责。
参考答案
业务库 MySQL
→ ODS:原样贴源,按天分区
→ DWD:清洗、去重、关联维表,形成可信明细
→ DWS:按主题和粒度汇总
→ ADS:面向报表/接口的指标表
→ BI 看板
职责一句话:ODS 保原始,DWD 保干净,DWS 保聚合口径,ADS 保好用。调度系统负责按依赖自动运行。
练习 2:判断岗位
下面三段描述分别更接近哪个岗位?
- “负责订单宽表和 GMV 指标开发,配置每日调度,任务失败时补数。”
- “负责分析本月复购率下降的原因,输出用户分层报告。”
- “负责订单服务接口开发,保证支付回调不丢单。”
参考答案
- 数据开发(偏数仓/ETL)。
- 数据分析。
- 后端开发。
判断依据不是用了什么工具,而是核心产出:数仓表和任务、分析结论、业务服务。
6. 面试延伸
面试题:数据开发和数据分析的区别是什么?
是什么:数据开发负责把数据稳定、准确地工程化,产出数仓表、ETL 任务和指标数据;数据分析负责从数据中提炼结论,支持业务决策。
解决什么问题:数据开发解决“数据能不能被可信地算出来、每天按时产出”;数据分析解决“数据说明什么、下一步怎么做”。前者是基础设施,后者是业务判断。
我的实操边界:我做过一个 8 表电商数据集的数仓分层和指标对账,能独立写清洗 SQL 和汇总 SQL;分析报告只做过课程练习,没有在真实业务中独立负责过分析结论。
面试题:一条订单数据从产生到报表要经过哪些环节?
是什么:下单写入业务库,经采集进入 ODS,清洗后进入 DWD,按主题汇总到 DWS,最后在 ADS 形成报表指标,由调度系统按依赖运行。
解决什么问题:分层让原始数据、清洗逻辑、汇总口径和应用指标各自独立。上游变化时只改一层,问题也能按层定位,不用在一张大宽表里猜。
我的实操边界:我在本地用 DuckDB 模拟过完整四层,也跑通过 PySpark 的清洗示例;没有在真实 Hive 集群上做过采集和调度运维。
7. 本章验收
- 能用自己的话解释数据开发、数据分析、后端开发三者的区别,并各举一个产出物。
- 能独立画出“业务库 → ODS → DWD → DWS → ADS → 报表”的链路,并说出每层职责。
- 能说出至少四类数据开发岗位及其核心技术,知道自己先学哪一类。
- 能用命令行查看
data/sample/orders_demo.csv,并统计出各订单状态的行数。 - 能按“读一遍、跟敲、脱稿”说出自己的学习步骤,并完成本章 2 个练习。
下一章:02 环境搭建。