数据仓库之ETL

数据仓库之ETL

概述

ETL,Extraction-Transformation-Loading的缩写,中文名称为数据抽取、转换和加载。
一般随着业务的发展扩张,产线也越来越多,产生的数据也越来越多,这些数据的收集方式、原始数据格式、数据量、存储要求、使用场景等方面有很大的差异。作为数据中心,既要保证数据的准确性,存储的安全性,后续的扩展性,以及数据分析的时效性,这是一个很大的挑战。

名词解释

  • ODS——操作性数据
  • DW——数据仓库
  • DM——数据集市

数据抽取

数据抽取是指把ODS源数据抽取到DW中,然后处理成展示给相关人员查看的数据

源数据:

  • 用户访问日志
  • 自定义事件日志、操作日志
  • 业务日志
  • 各服务产生的日志
  • 系统日志:操作系统日志,CDN日志等
  • 监控日志
  • 其它日志

抽取频次:

  • 如果没有特殊要求可以一天一次,但是需要避开拉去日志的高峰期
  • 对于有实时性要求的日志,可以一小时一次,或者直接使用kafka等相关工具收集,需要考虑到系统能否承受

抽取策略:

  • 由于数据量较大,一般都是采用增量抽取,但是对于一些特殊场景的数据,比如订单数据,由于订单的状态会发生变化,并且订单的量级是可预知和相对较少的,就需要采用全量拉取的策略
  • 对于增量拉取的日志,如果是文件类型,可以在文件名称上追加日期,例如 server_log_2018082718.log,这样就可以满足按小时拉取的需求
  • 对于源数据的保留,考虑到突发情况,服务器上的源数据至少要保证2天以上的时间

数据转换、清洗

顾名思义,就是把不需要的和不符合规范的数据进行处理。数据清洗最好不要放在抽取的环节进行,考虑到有时可能会查原始数据。一般各公司都会有自己的规范,以下列出几点仅供参考

数据清洗主要包括以下几个方面:

  • 空值处理;根据业务需要,可以将空值替换为特定的值或者直接过滤掉;

  • 验证数据正确性;主要是把不符合业务含义的数据做一处理,比如,把一个表示数量的字段中的字符串替换为0,把一个日期字段的非日期字符串过滤掉等等;

  • 规范数据格式;比如,把所有的日期都格式化成yyyy-MM-dd HH:mm:ss的格式等;

  • 数据转码;把一个源数据中用编码表示的字段,通过关联编码表,转换成代表其真实意义的值等等;

  • 数据标准,统一;比如在源数据中表示男女的方式有很多种,在抽取的时候,直接根据模型中定义的值做转化,统一表示男女;

  • 其他业务规则定义的数据清洗…

数据加载

数据拉取,清洗完之后,就需要展示了。一般是把清洗好的数据加载到mysql中,然后在各系统中使用,或者使用Tableau直接给相关人员展示

开源工具

Talend

易用性:有 GUI 图形界面但是以 Eclipse 的插件方式提供

技术支持:主要在美国

速度:需要手工调整,对特定数据源有优化知识

监控:有监控和日志工具

连接性:各种常用 数据库 ,文件, web,service

Kettle

易用性:有非常容易使用的 GUI,出现问题可以到社区咨询

技术支持:在美国,欧洲(比利时,德国,法国,英国),亚洲( 中国 ,日本,韩国)都可以找到相关技术支持人员

速度:比 Talend 快,不过也需要手工调整,对 Oracle 和 PostGre 等数据源做了优化,同时也取决于转换任务的设计

监控:有监控和日志工具

连接性:非常广泛的数据库,文件,另外可以通过插件扩展

Informatica

易用性:有非常容易使用的 GUI,但是要专门的训练

技术支持:遍布全世界

速度:是最快的

监控:有非常详细的监控和日志工具

连接性:各种数据源