数据仓库之ETL实战

ETL,Extraction-Transformation-Loading的缩写,中文名称为数据抽取、转换和加载。

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

名词解释:

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

一、数据抽取

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

源数据:

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

抽取频次:

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

抽取策略:

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

二、数据转换、清洗

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

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

  1. 空值处理;根据业务需要,可以将空值替换为特定的值或者直接过滤掉;
  2. 验证数据正确性;主要是把不符合业务含义的数据做一处理,比如,把一个表示数量的字段中的字符串替换为0,把一个日期字段的非日期字符串过滤掉等等;
  3. 规范数据格式;比如,把所有的日期都格式化成yyyy-MM-dd HH:mm:ss的格式等;
  4. 数据转码;把一个源数据中用编码表示的字段,通过关联编码表,转换成代表其真实意义的值等等;
  5. 数据标准,统一;比如在源数据中表示男女的方式有很多种,在抽取的时候,直接根据模型中定义的值做转化,统一表示男女;
  6. 其他业务规则定义的数据清洗...

三、数据加载

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

四、ETL相关工具

ELT相关的工具有很多,这里只列举一些常用的,而且各公司的技术原型也不一样,就需要根据实际情况来选择

数据抽取工具:

  • kafka
  • flume
  • sync

数据清洗

  • hive/tez
  • pig/tez
  • storm
  • spark

其它工具

  • 数据存储:hadoop、hbase,ES、redis
  • 任务管理:azkaban、oozie
  • 数据同步:datax、sqoop

五、ETL过程中的元数据

试想一下,你作为一个新人接手别人的工作,没有文档,程序没有注释,数据库中的表和字段也没有任何comment,你是不是会望着窗外,一声长叹...

所以元数据管理系统对于数据仓库来说是必须的,并且相关人员必须定时维护,如果元数据和数据仓库中的变动不同步,那么元数据系统就形同虚设。

这里说一句:对于元数据管理不应该是规范,应该是硬性规定。

欢迎订阅「K叔区块链」 - 专注于区块链技术学习

博客地址:http://www.jouypub.com

简书主页:https://www.jianshu.com/u/756c9c8ae984

segmentfault主页:https://segmentfault.com/blog/jouypub

腾讯云主页:https://cloud.tencent.com/developer/column/72548

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ImportSource

服务之美-读《微服务设计》笔记全集(一)

最近在微信读书上读《微服务设计》一书,目前读了30%多了,其间想法有点多,现分享给大家。

1452
来自专栏老九学堂

如何编写没有bug的代码?

我记不了很多东西。像标准库中的函数和方法、参数位置、软件包名称,样板代码等等,都在我脑容量之外。

751
来自专栏BestSDK

史上最全,0基础快速入门Python

首先,在学习之前一定会考虑一个问题——Python版本选择 对于编程零基础的人来说,选择Python3。 ? 1、学习基础知识 首先,Python 是一个有条理...

4934
来自专栏用户2442861的专栏

教你阅读Python开源项目代码

作者:董伟明 链接:https://zhuanlan.zhihu.com/p/22275595 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,...

4821
来自专栏ThoughtWorks

为什么优秀的程序员喜欢命令行?|洞见

优秀的程序员 要给“优秀的程序员”下一个明确的定义无疑是一件非常困难的事情。擅长抽象思维、动手能力强、追求效率、喜欢自动化、愿意持续学习、对代码质量有很高的追求...

3055
来自专栏日志易的专栏

日志易:IT 运维分析及海量日志搜索的实践之路(上)

IT运维分析(IT Operation Analytics, ITOA)是近年兴起的把大数据技术应用于分析IT运维产生的大量数据,数据来源主要有日志、网络流量、...

6031
来自专栏更流畅、简洁的软件开发方式

根据实例说数据库设计(一)—— 人员管理

     说在前面      可能您会问,树的系列还差第三篇没有写呢,怎么就又说数据库设计了?因为如果写第三篇的话,那么就涉及到了权限,而权限里面又涉及到了人员...

5437
来自专栏开源项目

放码云间 | 如何用码云辅助高校计算机教学?

前言 码云与高校 计算机相关专业的学生踏入社会时,如果没有一定的实际操作经验,则会被面试官们打上不适合的标签,企业不是为了培养人才而存在,它需要的是能够迅速上手...

2985
来自专栏斑斓

选择缓解风险的技术

三. 选择缓解风险的技术 一旦识别出迁移过程中可能存在的风险,我们就可以有的放矢地选择相关技术,制订降低风险的解决方案。 寻找丢失的知识 只有体验过去,才能谋...

3569
来自专栏進无尽的文章

聊聊程序设计思想之面向数据驱动编程

数据驱动编程的核心:数据驱动编程的核心出发点是相对于程序逻辑,人类更擅长于处理数据。数据比程序逻辑更容易驾驭,所以我们应该尽可能的将设计的复杂度从程序代码转移至...

5932

扫码关注云+社区

领取腾讯云代金券