李广洋的博客

数据工程师(Data Engineer)岗位介绍

数据工程师是属于软件工程师下的一个细分方向,但是随着行业需求的增多,这个岗位越来越引人注目。我在这篇博文会大致介绍数据工程师的主要职责,行业内不同类型的数据工程师,和解答在转型数据工程师时的常见问题。

那么数据工程师是做什么的呢?这个岗位的核心职责是解决公司关于数据存储与处理的问题。随着企业数据解决方案从关系型数据库到分布式数据库,再到基于云的数据仓库的变迁,对应的岗位也从数据库管理员、ETL 工程师等发展为数据工程师。现今所指的数据工程师基本是指关于大数据存储与处理的岗位。

具体而言,数据工程师的主要工作有两大类:

  1. 数据平台:建设与维护数据平台以提供储存和处理数据的能力
  2. 数据业务:将处理数据的业务流程转化为数据管道,并在数据平台上管理数据的整个生命周期

但由于公司组织结构、规模、和选用的解决方案的不同,工作内容可能是以上两类中的一部分,也可能是两类都包含。

例如,在 FacebookUber,数据工程师几乎只做数据业务部分,一大块工作是在比较成熟的内部数据平台里实现商业指标的计算和处理流程。数据平台则是由软件工程师组成的小组来开发和维护。

而对于众多使用 AWS 和 GCP 等公有云的中小公司,由于依赖云提供商的功能,或者 Snowflake、Databricks 等 SaaS 服务来构建数据平台,基础建设的难易程度大大降低。在这样的公司数据工程师可以像搭乐高一样,通过拼接相应云服务来搭建数据平台。

我曾工作过的另一家公司 Expedia 则处于一种中间情况。由软件工程师维护一套开源数据湖组件,各部门下的数据工程师自行在 AWS 上部署这套工具,建立与维护专门服务该部门的数据平台。

数据平台

搭建数据平台具体包含这些工作:

  • 规划稳定且可拓展的数据储存方案和数据处理架构。数据来源主要是批数据还是流数据,数据的输出是需要实时还是定时更新,数据的增长速度有多快,要根据这些具体的需求和场景建立适当的数据解决方案。
  • 选择合适的数据编排工具建立可靠的数据管道,最常见的工具是 Airflow。
  • 提供数据平台的支持和管理工具,包括数据目录、数据沿袭、元数据管理、权限管理、状态监测与报警等等。这些工具可能是自行开发,也可能是选购第三方服务。
  • 提供数据质量管理工具
  • 提供数据查询引擎和查询服务或界面,确保下游团队可以按照他们各异的需求来获取数据。
  • Terraform、Ansible 等运维自动化工具,和 AWS CloudFormation 等自动化运维云服务。
  • 云服务选型。了解市场上的云提供商的功能,和主流的 SaaS 数据服务,考察哪些值得被引入公司的数据平台。

这些工作内容可大可小。对于使用私有数据中心的公司,数据平台的各个部分都很可能需要开发自己的内部实现,那么每一个部分都可能是由一个团队来完成。而对于已经积极拥抱云服务的公司,几个人的小团队也可以完成所有这些内容。

数据业务

有了数据平台,下游组的数据工程师就可以在平台上运行具体的数据业务处理。要将商业上的需求转化成数据工程的任务,具体包括这些工作:

  • 数据指标的构思和落地。数据指标通常是由下游的分析师提出,但是如果理解了如何计算这些指标,和为什么要计算它,这对数据工程师将商业需求转化成代码会有极大帮助。
  • 数据建模。根据数据输入输出时的各种需求创建相适应的数据模型。
  • 对各种格式的来源数据的处理,和进入数据平台后的数据清理、标准化、转换等处理
  • 处理程序和查询语句调优。最常见的是 SQL 调优,根据查询引擎的不同,有着各异的调优方式。处理程序调优也是由平台选用的工具而定,常见工具包括 Spark、Hive、Flink、Kafka 等。
  • 关于数据任务的 On Call。比如上游数据库是否稳定可用,平台内各服务状态监测,数据质量监测等。

虽然上述工作内容我分成了两部分描述,但在实际工作中职责范围并没有这么明确的区分。无论是在大小公司,数据工程师的实际职责可能是上面任意几点的组合。


在前文我泛泛地描述了数据工程师职责范围,但对于有意转往这个方向的朋友恐怕描述地太粗糙。因此我也尝试回答一些有意转行的人可能会问的问题:

数据工程师需要的编程能力高吗?

数据工程师需要多少编程能力主要取决于团队对这个岗位的需求。

对于需要自行开发数据平台各个组件的团队而言,他们对数据工程师的编程能力基本和软件工程师无异。

但市场上大部分的数据工程师岗位做的是数据业务部分的工作。这些岗位对于编程能力的要求略低于软件工程师。他们主要的编程场景是数据处理任务和数据任务编排(Data Orchestration)。此外,数据工程师岗位通常对大数据处理的经验也有要求,因为实际工作中有许多项目依赖成员对分布式工具的理解。这些经验的积累往往也与代码阅读和编写能力息息相关。

数据工程师的 On-call 是什么样的?

数据工程师的 On-call 情况同样取决于所在团队所处的位置。

对于公司中的核心数据组,支持的可能是全公司各业务线的数据处理任务,甚至是外部客户的数据任务,On-call 压力自然较高。

而具体某个业务线以内的数据任务的维护相对不那么紧张,这是由于这类数据组往往不接收外部用户的直接输入,而是处理内部的,由其他程序或上游小组生成的数据,输入相对稳定。且对于常见的数据质量问题,也可以通过自动化管理的办法避免一些人力的维护。

数据工程师的职业发展有哪些选择?

作为软件工程师中的一个子类,数据工程师的职业发展和软件工程师没有太大区别。对于主要从事数据平台开发工作的工程师来说,可以深入数据平台的架构,成为数据平台架构师,或者转向为软件工程师做更加 infra 的工作。对于主要做数据业务的工程师来说,除了一样的转型为 Data infra 方向的软件工程师,还可以在各种数据使用场景上深挖,例如转型为机器学习工程师数据可视化工程师,和数据科学家等。

如果是转型管理岗位,数据平台组是一个不错的起点。随着数据驱动决策的流行,数据平台正在成为核心部门。相较业务部门而言通常更为稳定,且做的事情往往有更大的影响力。