引言
想找到一份数据工程相关工作并不容易,但是也没有想象中的那么难。在网上看到很多人都说进入公司后就是做”SQL Boy“的言论后,却在学习阶段发现技术要学 ——— Spark、Flink, Hadoop、Datalake、 Lakehouse等等
要明确入门方向、掌握学习方法,你需要一些指引。本文将拆解数据工程所需的全部步骤!
先聊策略:别迷信“刷LeetCode拿Offer”
很多人觉得刷够一定数量的LeetCode题目,工作就会自动找上门。但现实几乎从不是这样!
xiaowantree.com 里面会定期更新优质文章,大家可以注册免费或者付费观看,如果需要了解产品,请点击这里,助力您的offer之路。
要拿到数据工程Offer,你需要这些
1. 可验证的核心技能
- SQL与Python(基础中的基础)
- 分布式计算能力(三选一:Snowflake/Spark/BigQuery)
- 任务编排知识(三选一:Airflow/Mage/Databricks Workflows)
- 数据建模与数据质量管控能力
2. 能证明能力的“硬通货”
- 1个以上可展示的作品集项目
- 在LinkedIn和面试中能体现的个人品牌
一、学习SQL:数据工程的“母语”
回避SQL就等于放弃数据工程工作——SQL是你必须掌握的最基础语言。
1. 推荐学习资源
- Leetcode: 侧重sql题目的练习
- DataLemur:侧重面试级SQL题,贴近实战
- StrataScratch:含真实业务场景的SQL练习
2. 必须掌握的核心知识点
(1)基础操作与聚合
- JOIN类型:重点掌握INNER JOIN、LEFT JOIN、FULL OUTER JOIN,几乎不用RIGHT JOIN
- GROUP BY聚合:明确COUNT与COUNT(DISTINCT)的区别(分布式环境中COUNT(DISTINCT)速度慢)
- CASE WHEN+聚合:例如统计过期订单数:

- 基数缩减:将高基数维度转为低基数,例如按年龄分桶:

(2)查询结构对比:CTE/子查询/视图/临时表
类型 | 适用场景 | 注意事项 |
---|---|---|
子查询(Subquery) | 几乎不用 | 严重降低数据管道可读性 |
临时表(Temp Table) | 需重复使用某段逻辑 | 会被物化,能提升后续执行效率 |
视图(View) | 需长期存储逻辑(超出自定义管道执行周期) | 不存储数据,仅保存查询逻辑 |
CTE(公共表表达式) | 其他所有场景 | 最提升代码可读性,优先用 |
(3)分布式环境中的SQL逻辑
- 触发“数据混洗(Shuffle)”的关键字:JOIN、GROUP BY、ORDER BY(需注意性能)
- 高可扩展性关键字(Map端直接执行):SELECT、FROM、WHERE、LIMIT(效率高)
(4)窗口函数:面试高频考点
基础语法

- 若不指定ROWS BETWEEN,默认是“从窗口起始行到当前行”(累积计算)。
RANK/DENSE_RANK/ROW_NUMBER的区别
函数 | 无重复值时 | 有重复值时(如并列第1) |
---|---|---|
RANK | 结果一致 | 跳过排名(并列1后下一名是3) |
DENSE_RANK | 结果一致 | 不跳过排名(并列1后下一名是2) |
ROW_NUMBER | 结果一致 | 强制唯一排名(按数据自然顺序分配) |
实战场景:滚动计算
按部门计算30天滚动收入(面试常考):

- 注意:需确保每个日期都有数据(即使收入为0),否则结果会错。
(5)数据写入:INSERT INTO/INSERT OVERWRITE/MERGE
- INSERT INTO:仅追加数据,极易重复,需搭配TRUNCATE/DELETE使用
- INSERT OVERWRITE:覆盖目标分区数据,大厂最常用
- MERGE:对比新旧数据,仅更新/删除差异行,缺点是超大规模数据下速度慢
二、学习Python(或Scala):突破SQL的局限
SQL虽好,但有局限性。要处理复杂逻辑(如API调用、自定义函数),需掌握Python或Scala。
1. 语言选择:Python还是Scala?
- 零基础:选Python(入门快、生态全,能快速出成果)
- 有编程基础:可试Scala(静态类型,对schema和数据质量管控更严格,适合Spark深度开发)
2. 核心学习内容
(1)基础:数据类型与结构
- 基础类型:string、integer、decimal、boolean
- 复杂结构:list(数组)、dictionary(字典)、stack(栈)、queue(队列)
- 非必需但面试可能考:heap(堆)、tree(树)、graph(图)(不用深钻,了解基础即可)
(2)算法基础
- 必学:循环、线性查找、二分查找
- 必懂:大O表示法(能分析时间/空间复杂度)
- 非必需但面试可能考:动态规划、贪心算法、迪杰斯特拉算法(不用深钻)
(3)数据工程实战场景
- 编写Airflow DAG:用Python定义数据管道流程(最常用场景)
- 调用REST API:用
requests
库处理GET/POST/PUT请求(获取外部数据) - 编写Spark UDF:
- 部分场景下需用 Python UDF 处理数据,但注意:Spark 1.x/2.x 版本中 Python UDF 性能较差,若使用旧版本,建议用 Scala 编写 UDF。
(4)代码测试
- Python:用
pytest
框架测试代码。推荐搭配Chispa
库 —— 它专门用于测试 PySpark 任务,功能非常实用。 - Scala:用
JUnit
框架
三、学习分布式计算:处理海量数据的核心
分布式计算的核心是“多台机器协同,每台处理一小部分数据”,突破单机算力限制。需三选一:Spark/BigQuery/Snowflake。
1. 核心概念:数据混洗(Shuffle)
- 作用:确保特定数据到特定机器(如“按用户汇总消息数”,需同一用户数据到同一机器)
- 触发场景:仅JOIN、GROUP BY、ORDER BY时必须Shuffle
- 误区:Shuffle不是“坏事”——它让分布式计算逻辑接近单机,但超大规模数据下会成性能瓶颈
2. 超大规模场景:Shuffle优化技巧
- 广播连接(Broadcast JOIN):小表(<5GB)广播到所有节点,无需Shuffle
- 分桶连接(Bucket JOIN):大表先分桶,后续多次JOIN可复用,减少重复Shuffle
- 数据集分区:按时间(如按天)分区,避免JOIN全量数据
- 累积表设计:计算“月活”时用“日活累积表”,不用扫30天原始数据
3. 常见问题:数据倾斜(Skew)
- 问题:某台机器数据量远大于其他机器,拖慢整体速度
- 解决方案:
- Spark 3.x+:启用“自适应执行(Adaptive Execution)”(Databricks支持最好)
- Spark 3.x以下:对JOIN/GROUP BY关键字“加盐(Salting)”,用随机数平衡数据分布
4. 输出数据:Parquet文件(重点)
- 特性:支持“行程长度编码(Run-Length Encoding)”,压缩率极高(曾将Airbnb数据集压缩90%+)
- 场景:用Spark处理后,通常以Parquet格式写入S3/GCP/Azure
- 注:Snowflake/BigQuery用自研格式,可参考其他专项资料(如“西雅图数据Guy”的内容)
四、数据建模与数据质量:做“可用的好数据”
数据工程师的“产品”是数据——需满足“准确、易用、合规”三个标准。
1. 数据质量的3个核心标准
- 准确性:无重复、无NULL、格式正确、行数符合预期
- 易用性:有文档、列名规范、查询高效(避免巨额云资源成本)
- 合规性:不存储多余的个人身份信息(PII),保护用户隐私
2. 如何实现高质量数据?
(1)确保准确性:校验+自动化
- 首轮校验:让数据分析师参与(参考Airbnb的MIDAS流程)
- 自动化校验:用Great Expectations等工具,嵌入数据管道
- 关键模式:遵循“写入-校验-发布(Write-Audit-Publish)”,不合格数据不进生产
(2)提升易用性:文档+建模
- 文档先行:搭建管道前,先写需求文档、确认 stakeholder(避免重复开发)
数据建模三选一(按场景选):
建模类型 | 核心逻辑 | 适用场景 |
---|---|---|
关系型建模 | 减少数据重复,查询较复杂 | 存储成本敏感,数据一致性要求高 |
维度建模(Kimball) | 拆分为事实表+维度表,平衡存储与计算 | 多数业务分析场景 |
单一大表(One Big Table) | 事实+维度合并,查询极快,数据重复多 | 计算成本敏感,查询场景固定 |
(3)确保合规:隐私保护
- 识别PII:任何可定位到具体用户的信息都算(如手机号、邮箱、精准地址)
- 处理方式:匿名化处理,平衡“长期分析需求”与“用户隐私”
五、打造作品集项目:让Offer主动找你
作品集是“能力证明”的硬通货,我之前看过一个很典型的例子,他是因为开发过一款产品,这个产品的月活达到了4w人,才被顶级科技公司录取了,所以说如果你现在有很多充足的时间,我非常推荐可以用自己的专业知识去开发一个小产品,虽然不一定会得到市场的认可,但是你可以把社交媒体变成你的名片,向面试官展示你的能力,会给你加分不少。
1. 项目选择3个原则
- 选你热爱的领域:能支撑你3个月每周5-10小时的投入(不热爱很难坚持)
- 包含前端展示:用Tableau/Power BI做可视化,或用JavaScript搭简单网站,方便展示
- 难度匹配:别做“一键完成”的项目(太简单没竞争力),要包含“数据管道+质量校验+自动化运行”
2. 项目必须包含的4个要素
- 完整文档:说明输入/输出数据集、质量校验规则、运行频率
- 生产环境运行:用Heroku Scheduler(每月5-10美元)或自建Airflow集群,证明管道可落地
- 用热门技术:融入Spark/Snowflake/Iceberg/Delta Lake等,贴合行业趋势
- 开源到GitHub:附清晰README,方便面试官查看
六、打造个人IP:面试与人脉的“加分项”
有技能+作品集后,IP 能帮你“脱颖而出”。
1. LinkedIn人脉搭建
(1)重点连接两类人
- 招聘经理/猎头:让他们记住你(即使当前无空缺,未来可能有机会)
- 同行:互相分享求职技巧,缓解求职压力
(2)人脉搭建技巧
- 先“互动”再“求内推”:评论对方内容、分享见解,建立信任后再提需求
- 用“提问”开场:想内推时,先问“您目前负责的业务中,数据管道主要解决什么问题?”,比直接要内推成功率高
- 接受“低回复率”:初期发20条私信可能仅1-2条回复,优先联系与你资历相近的人
(3)创作内容:让更多人认识你
- 分享学习笔记(如“Spark Shuffle优化实战”),我也是近一两年才开始养成了写文章的习惯,博士的学习生活也让我更加清楚什么是好的文章,也切切实实感受到了写文章带给我的好处,在这里我可以分享一个小技巧:你写完后你要回过头看看你的这篇文章,如果你是读者,你会愿意看下去吗,如果读者不是那么的专业,他能够看懂吗?想好这些问题,我相信你可以写出一个很棒的文章。
- 记录项目复盘(如“用Snowflake搭建电商数据管道的踩坑记录”)
- 我也是靠内容创作赚了一些钱,而且随着你越做你会知道的越多——内容创作的力量远超想象!
2. 面试:做“真实的人”,别做“答题机器”
(1)面试前准备
- 研究面试官:查LinkedIn,了解其在公司的年限、负责业务
- 问猎头细节:明确“用什么技术”“团队规模”“文化风格”
(2)面试中要展现的3个特质
- 热情:对岗位和业务表现出兴趣
- 沉稳:回答问题时逻辑清晰,不慌不忙
- 好奇:主动问“这个数据管道当前最大的挑战是什么”,展现思考深度
总结:2025年入门数据工程,难但可行,AI 的发展有点抹杀了DS的市场,但是AI也仍然需要数据
当前就业市场确实严峻,但优秀的工程师和初创公司,往往在困境中成长。跟着这份路线图走,能帮你更接近理想的 data engineering 岗位!
互动:你觉得还有哪些关键技能? 我是否遗漏了什么重要内容?可以发邮件 qgm226131@gmail.com或者在小红书私信告诉我,你的需求会被优先满足。
若觉得这份路线图有用,欢迎分享给朋友!
Comments