Data Engineer 面试怎么准备:SQL、Python、数据建模和 Pipeline 设计
Data Engineer 面试怎么准备:SQL、Python、数据建模和 Pipeline 设计
Data Engineer 面试经常不是单一题型,而是 SQL、Python、数据建模和 pipeline design 的组合。很多候选人只刷 SQL 题,但真正面试时会发现:面试官还会追问数据怎么建模、pipeline 如何保证正确性、SaaS 数据源如何统一、失败重跑怎么处理。
如果你准备的是 Snowflake、Databricks、数据平台、analytics engineering 或 ML data infra 相关岗位,这类能力都很关键。
SQL 题不只考语法
常见 SQL 题会围绕 join、group by、窗口函数、日期区间和分摊计算。
例如“找出参与过超过 90 天项目的员工”,表面上是 join + date diff,但面试官可能会看:
- 是否理解项目持续时间定义
- 是否处理 project end date 为空的情况
- 是否去重员工
- 是否用清晰的 CTE 分层
再比如“计算每个员工在每个项目上的平均预算分摊”,关键不是写 AVG,而是先定义预算如何分摊:
project_budget / number_of_employees_on_project
如果一个员工参与多个项目,还要确认返回粒度是 employee-project,还是 employee aggregate。
SQL 面试里,先问清 grain 很重要。grain 不清,SQL 很容易写对语法但答错业务。
Python 题看数据处理习惯
Data Engineer 的 Python 题通常不会像算法岗那样追最优复杂度,但会看你处理数据是否稳:
- parsing 是否健壮
- dict / set / list 使用是否合适
- 空值和异常输入是否处理
- 是否能写出清晰函数
- 是否能用测试样例验证
如果题目是日志、事件、文件或 record 处理,不要把所有逻辑写在一个大循环里。可以拆成:
parse_record
normalize_key
update_aggregate
format_output
这类拆分会让代码更像生产环境,也方便 follow-up。
Pipeline Design 的核心是统一和质量
“设计一个数据平台,把多个 SaaS app source 统一到一个 analytics layer”是典型 Data Engineer 系统设计题。
可以按这条链路回答:
Source Connectors
↓
Raw Landing Zone
↓
Validation / Dedup / Schema Mapping
↓
Canonical Data Model
↓
Warehouse / Lakehouse
↓
BI / Reverse ETL / ML Features
这里的重点不是工具名,而是每层解决什么问题。
Raw 层保留原始数据,方便回溯。Validation 层处理 schema、类型、空值、重复数据。Canonical model 把不同 SaaS 的概念统一,比如 user、account、subscription、event、invoice。最后再面向 BI 或模型提供宽表、事实表和维表。
数据建模要讲清事实表和维表
如果面试官让你设计 analytics layer,可以用 star schema 组织:
- fact_events:行为事件
- fact_orders:订单或交易
- fact_project_assignment:员工项目参与关系
- dim_user:用户或员工
- dim_account:客户账户
- dim_time:时间维度
- dim_source:数据来源
关键是说明每张 fact table 的 grain。
例如:
fact_project_assignment 的 grain 是 one row per employee per project。
这个定义会决定后续所有聚合是否正确。很多数据错误都来自 grain 混乱。
Pipeline 的可靠性回答框架
面试官常问:如果某个 source 延迟、失败、重复发送,怎么办?
可以这样回答:
- 每个 source connector 记录 watermark。
- Raw data append-only 存储,避免覆盖原始输入。
- 使用 idempotent load,按 source_id + record_id 去重。
- 失败任务可重跑,且重跑不会重复写入。
- 对关键表做 row count、null rate、freshness、referential integrity 检查。
- 异常数据进入 quarantine table 或 dead letter queue。
- 每个 batch 记录 lineage 和 processing metadata。
Data Engineer 面试里,“可重跑”和“幂等”是高频加分点。
实时和离线要分清
不是所有数据都需要实时。你可以主动区分:
- Dashboard 指标:分钟级或小时级即可。
- 财务和结算:准确性优先,通常批处理。
- 风控或推荐特征:可能需要实时或近实时。
- 数据科学训练集:离线批处理更合适。
这样可以避免过度设计。面试官通常会欣赏你根据业务需求选择复杂度,而不是默认上最重的 streaming 架构。
常见追问
如何处理 schema change?
用 schema registry 或 contract tests。新增字段可以兼容,字段删除或类型变化需要版本化和告警。Raw 层保留原样,处理层做显式映射。
如何保证数据没有重复?
使用 source primary key 或构造 deterministic id。写入中间层和最终层时保证 merge/upsert 幂等。
如何发现 pipeline 出问题?
监控 freshness、volume、error rate、null rate、duplicate rate 和关键业务指标。不要只监控任务是否成功,因为任务成功不代表数据正确。
如何支持回填?
Raw 层保留历史,处理逻辑版本化。回填时指定时间范围和目标表分区,避免影响线上查询。
结尾
Data Engineer 面试的核心不是会几个 SQL 函数,而是能把数据从来源变成可信资产。SQL 要讲清粒度,Python 要写得稳,pipeline design 要覆盖幂等、质量、回填、schema 演进和业务查询模式。
如果你准备 Data Engineer 或 Analytics Engineer 面试,可以用一次模拟面试把 SQL、Python 和 pipeline design 连起来练。很多候选人的问题不是不会某个知识点,而是没办法把它们组织成一个完整的数据工程答案。你可以在服务和价格页面查看数据工程面试辅导和 mock 安排;如果已经有具体面试时间,也可以通过联系我们页面说明目标岗位、面试轮次和准备进度。