国内的ETL工程师日常工作是啥样的


谢邀
那到底ETL工程师们的日常工作是什么?
在回答之前,我先抛出一个问题:为什么之前叫ETL工程师,现在更多的是称数据工程师?
我觉得从我个人而言,首先要从更宏观的角度来理解ETL工程师。一般传统公司称ETL工程师,因为以前经常是将业务系统的数据取出来,进行数据清洗,再按照星型或雪花型建模再放到数仓中为下游BI服务。
而现在为什么叫数据工程师?是因为大家意识到,随着数据量的增多,数据产生的价值和变现的维度也随之增多了,数据工程师需要掌握的技能发生了许多变化。
其中最重要的是要肩负起这两点责任:运营数据(养数据)和达到公司的数据目的。这是ETL工程师或者说是数据工程师最终要达到的目标,接下来我会详细解释一下。
一. 关于这个岗位:你需要处理上下游的关系
作为数据工程师或者ETL工程师,需要经常跟业务系统的人打交道,所以要对业务系统比较熟悉。比如它们存在各种接口,不管是API级别还是数据库接口,这都需要ETL工程师非常了解。
其次是其下游,这意味着你要跟许多数据分析师、数据科学家打交道。比如将准备好的数据(数据的清洗、整理、融合),交给下游的数据分析师和数据科学家。
过去我们经常说数据分析师,像BA(Business Analytics)或是BI(Business Intelligence)分析师,主要负责报表的展示分析。数据科学家(Data scientist),则可能做一些Ad hoc的数据分析,与AI、数据应用的相关性更高。
二. 从这几方面了解 ETL工程师
ETL工程师主要做这几项工作:
首先是梳理,我们经常说以终为始,在行动之前需要先想清楚这些数据的用途,不应为了ETL而ETL。
所以对于一个优秀的数据工程师而言,需要非常理解公司使用这些数据能做到什么,而这就涉及到你对公司业务,数据逻辑的理解是否透彻。我认为这是作为一个好的数据工程师的前提。
举个例子,不管是做数仓的建设,内容的推荐,还是做一些反欺诈、资产推荐等,这个范围非常广。所以ETL工程师要先理解做这件事情的目标,进而再向上追溯需要做哪些工作才能支撑该目标。如果能用全局的观念做这件事情,相信能取得很好的效果。
而在日常的工作中,我认为有几大块非常重要:
首先是数据的获取。这类似于巧妇难为无米之炊,想要发挥数据价值的前提是要获取数据。
为了实现这个目的,就需要工程师对收集的数据如数家珍。最好能有一个数据目录将这些业务系统中的数据整理清楚,比如它们在哪,都有什么意义等。这时,如果别人向你要数据你就能很快的定位到。
为什么是这样?在小公司还好,如果在大公司可能有几十、数百个系统,每个系统中存有几十,甚至上千张表。这时理解这些系统和任务其实是一个非常复杂的工作。
当然仅做到上面还不够,还需要构建好的工具和方法提取这些数据。这中间还有许多维度,比如上游系统的侵入性是不是很高,它能给你何种权限等。另外,还需要考虑这些数据能否丢失,数据的语义需要什么保障,传输的准确性有什么要求。
相当于需要有自己的工具箱,能清楚地知道对于不同维度的要求可以分别使用哪个工具,针对不同情况能变换相应的策略和方法。
关于数据采集,基本有这三种途径:埋点、从数据库/文件系统抽取、通过API拿数。对于这三种都要能有相应的应对措施,高效地完成。
下一步大概率会去做数据清洗,目前有两种情况:一种是将数据放到一个统一的ODS平台,先拉数据再做清洗。另一种是一边传输一边清洗。针对这两种情况工程师要非常明白,为达到数据目标应该采取何种措施。
这其中会有一些偏好或取舍,需要在存储空间、执行效率之间找到平衡。针对这点可以看:DataPipeline CTO陈肃:从ETL到ELT,AI时代数据集成的问题与解决方案

另外关于实时和批量在此也有所影响。 目前批流一体是当下的一个发展趋势,即在统一平台中管理各种任务,解决多个平台的运维难题。这要求工程师需要熟悉许多工具,比如流式的计算框架, 例如Kafka Streams, Spark(Streaming), Flink等。


推荐阅读