ETL 是什么?不信你看不懂!--九五小庞

发布时间 2023-10-27 14:28:44作者: 九五小庞

ETL,全称 Extract-Transform-Load,它是将大量的原始数据经过提取(extract)、转换(transform)、加载(load)到目标存储数据仓库的过程。ETL 虽然大部分应用在大数据领域,对小数据也可以经过这个过程的处理。

理解 ETL

ETL 是企业数据应用过程中的一个数据流(pipeline)的控制技术,把原始的数据经过一定的处理,放入数据仓库里。

可以想象一下一条大河的源头被污染,下游就无法作为饮用水源,也无法用于灌溉。如果想用于灌溉,就要将河上游工厂的污水进行处理之后再排入,如果想用于饮用,那就要用水淡化或者渗透过滤技术,对水质进行改造。

同样,原始数据并不是完美的、洁净的,质量参差不齐的数据对于数据最终的使用会产生很大的影响。

ETL 过程示意图

 

除了数据的清洗,还要将所有有用的数据汇集在一起,ETL 就是这样可以重复的,有周期性的一个过程。

提取 extract

在提取阶段,解决的是数据来源问题。主要有以下几种:

  • 业务数据
    在我们企业运行过程中,会有一些用户的交易数据,如用户的购买订单、退款退货、用户发布的视频、用户的注册信息等等,这些都存在我们的业务数据库里,这些数据库通常是关系型数据库,这是我们获取数据的一个重要来源。
  • 文件数据
    还有一些数据是有文件的形式存在,比如我们服务器运行的 log,它记录了用户对网站的请求情况,再比如我们通过埋点收集的日志文件,记录了用户的交互。
  • 第三方数据
    通过第三方购买或者合作形式信用的数据,这些数据可以作为我们业务分析的补充数据。这些数据一般通过和第三方机构的接口(API)形式,对接传输过来。三方的来源、数据形式格式可能有多种多样,就需要我们分别进行对接处理。

数据的格式和形式一般有以下几种:

  • 关系型数据库 SQL,RDBMS
  • 文件型数据库 NoSQL
  • 日志文件
  • XML/Html
  • JSON
  • CSV/TSV(flat files)
  • 等等

Staging Area 为缓存区,在数据加载后进行处理时,将过程中的结果暂时存放起来,有些计算需要一定的硬件资源和时间,设定缓冲区可以对 ETL 有很大有帮助。

提取是把多种多样的原格式数据抽象出来,形成统一的数据格式先放入缓存区,不会直接进入数据仓库,等待下一步转换操作。

转换 transform

弄清楚了数据来源,前边做了数据的整合,对文件格式进行了一些处理。本步骤,根据我们的商业需要,我们用一些规则、方法进行数据处理。一般常见的转换操作有:

  • 筛选:筛选部分数据,或者部分字段,提取一部分有用的数据
  • 清理:缺失值填充、默认值设定、枚举映射等,如将一些编码转为可识别的符号,比如省份代码 sh 转为「上海」
  • 合并:将多个属性合并在一起
  • 格式转换:,如原数据是一下个时间戳(timestamp),我们为了方便后续分析转换为时间格式,指定时区
  • 拆分:将单个属性值拆分为多个属性值,如原为一个邮编,拆分解析成省份、城市等多个字段
  • 排序:按期望的数据顺序进行排列
  • 计算:如原数据为年龄,用当前年份减去年龄同,取得出生年份

原则:

  • 建数仓时尽量保留原始数据,支持多样需求
  • 为特定报表时尽量取所需要的数据

加载 load

数据的加载方式一般有以下两种重要类型:

  • 全量加载(Full load / Bulk load)
  • 增量加载(Incremental load / Refresh load)

全量一般是第一次进行数据加载,这个过程比较长,也有种情况是业务数据存在历史全量数据不停更新的情况,这种情况无论何时都需要全量加载。还有一种情况会追溯一定的时间周期内的数据进行加载,如此业务30天之前的数据不会有再任何变化。

增加加载最为常见,一般一日加载一次,加载上一日数据,也有一周或者一月加载一次的。

加载数据是数据进入数据仓库的最后一步,加载是依赖提取和转换的,因此,加载数据是一个完整的 ETL 过程,这个过程需要大量的数据流转加工时间,而且是周期性重复的工作,所以一般由系统自动完成,执行时间为业务一个最小周期——日(实时数仓会选择更小的时间粒度,如10分钟一次),同时选择业务量小的凌晨进行。

除了增加新增加数据,加载同时伴随着对已加载数据的修改。选择何种加载类型,以及加载周期、加载内容,要看具体业务,产品经理和分析师分析需求最终确定一个最优的方案。

其他

  • 一些小型的数据项目、数据报表也伴随着完整的 etl 过程
  • 有时需要实时的 ETL,如推荐、金融反欺诈、反垃圾