DD 数据开发学习站DATA ENGINEERING
模块 01 · 开始

数据开发是什么

岗位地图、日常工作、技术栈全景,以及一条数据从产生到报表的完整链路。

难度 · 入门 约 50 分钟 必修 练习 5 项 计划内
前置知识:无,零基础可以开始。
本页目录 · 19 节

本章目标:说清数据开发每天在做什么、和数据分析/后端有什么区别,并能画出一条电商数据从下单到报表的完整链路。 前置知识:无。 预计用时:40–60 分钟。

1. 为什么需要它

你在购物 App 下了一单,这个动作几百毫秒就完成了。但第二天早上,运营要在看板上看到昨天的成交额、下单人数、品类排名;老板要看到本月和上月的对比;财务要核对支付金额和订单金额。

这些数字不会自己出现。业务库里的数据是给程序用的,格式乱、有重复、有取消单。必须有人把数据采集、清洗、汇总、按时产出,变成可信的报表。这个工作就是数据开发。

所以数据开发的核心是三件事:

  1. 理解业务问题,知道该算什么指标、口径是什么。
  2. 把问题翻译成 SQL 或数据处理程序。
  3. 让流程每天稳定运行,出问题时能定位、能补数。

本章不要求你装环境、写代码,只要求你建立一张“全景地图”。后面的每章都是在这张地图上填细节。

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、数仓分层、项目对账做到能讲
只关心“跑通” 跑通不代表结果对 每次查询都先猜行数和量级,再核对
把数据分析当数据开发 报告写得好不等于数据链路能落地 主动讲清你做的表、任务、对账和补数

推荐的学习方法是三遍法:

  1. 读一遍:快速读完一章,只求知道这章解决什么问题,不纠结细节。
  2. 跟敲:关掉答案,照着题目自己敲。报错就完整读报错信息,定位到行号和字段名。
  3. 脱稿:合上教程,用自己的话写出核心 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:判断岗位

下面三段描述分别更接近哪个岗位?

  1. “负责订单宽表和 GMV 指标开发,配置每日调度,任务失败时补数。”
  2. “负责分析本月复购率下降的原因,输出用户分层报告。”
  3. “负责订单服务接口开发,保证支付回调不丢单。”
参考答案
  1. 数据开发(偏数仓/ETL)。
  2. 数据分析。
  3. 后端开发。

判断依据不是用了什么工具,而是核心产出:数仓表和任务、分析结论、业务服务。

6. 面试延伸

面试题:数据开发和数据分析的区别是什么?

是什么:数据开发负责把数据稳定、准确地工程化,产出数仓表、ETL 任务和指标数据;数据分析负责从数据中提炼结论,支持业务决策。

解决什么问题:数据开发解决“数据能不能被可信地算出来、每天按时产出”;数据分析解决“数据说明什么、下一步怎么做”。前者是基础设施,后者是业务判断。

我的实操边界:我做过一个 8 表电商数据集的数仓分层和指标对账,能独立写清洗 SQL 和汇总 SQL;分析报告只做过课程练习,没有在真实业务中独立负责过分析结论。

面试题:一条订单数据从产生到报表要经过哪些环节?

是什么:下单写入业务库,经采集进入 ODS,清洗后进入 DWD,按主题汇总到 DWS,最后在 ADS 形成报表指标,由调度系统按依赖运行。

解决什么问题:分层让原始数据、清洗逻辑、汇总口径和应用指标各自独立。上游变化时只改一层,问题也能按层定位,不用在一张大宽表里猜。

我的实操边界:我在本地用 DuckDB 模拟过完整四层,也跑通过 PySpark 的清洗示例;没有在真实 Hive 集群上做过采集和调度运维。

7. 本章验收

  • 能用自己的话解释数据开发、数据分析、后端开发三者的区别,并各举一个产出物。
  • 能独立画出“业务库 → ODS → DWD → DWS → ADS → 报表”的链路,并说出每层职责。
  • 能说出至少四类数据开发岗位及其核心技术,知道自己先学哪一类。
  • 能用命令行查看 data/sample/orders_demo.csv,并统计出各订单状态的行数。
  • 能按“读一遍、跟敲、脱稿”说出自己的学习步骤,并完成本章 2 个练习。

参考:从这里开始、求职准备与投递。

下一章:02 环境搭建。

本章任务0 / 5
本页目录