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 安排;如果已经有具体面试时间,也可以通过联系我们页面说明目标岗位、面试轮次和准备进度。

Previous
Previous

LLD 和 OOD 编码面试怎么准备:从购物车、权限系统到告警引擎

Next
Next

技术电面遇到多 Part 编程题怎么办:比写出代码更重要的是推进节奏