引言

想找到一份数据工程相关工作并不容易,但是也没有想象中的那么难。在网上看到很多人都说进入公司后就是做”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)数据工程实战场景

  1. 编写Airflow DAG:用Python定义数据管道流程(最常用场景)
  2. 调用REST API:用requests库处理GET/POST/PUT请求(获取外部数据)
  3. 编写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个要素

  1. 完整文档:说明输入/输出数据集、质量校验规则、运行频率
  2. 生产环境运行:用Heroku Scheduler(每月5-10美元)或自建Airflow集群,证明管道可落地
  3. 用热门技术:融入Spark/Snowflake/Iceberg/Delta Lake等,贴合行业趋势
  4. 开源到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或者在小红书私信告诉我,你的需求会被优先满足。

若觉得这份路线图有用,欢迎分享给朋友!