1.ETL名词解释


  • 英文缩写

Extract-Transform-Load ,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至到目的端(一般指的是数据仓库)的过程。

  • 目的

一般企业按照组织架构设置不同部门,而且部门为了提供自我智能化运转会建立自己的自动化系统。那么站在企业领导层或者决策部门的角度,面对不同数据模型系统的数据给公司决策和战略发展计划带来很大的困难,也增加了很多的风险性。基于此,将企业中零碎、分散、杂乱的数据整合到一起,然后为企业的决策提供分析依据。


2. 先看看涉及数据库的两个关键名词


  • OLTP

全称On-Line Transaction Processing,联机事务处理或在线事务处理。举个简单的例子,银行转账业务,整个流程很清晰。但是,不幸的是网络波动超时,导致交易失败,那么需要将对这个转账业务做回滚,恢复涉及的两个账户的状态。类似上述银行转账这种对实时性要求极高的系统,我们简称为OLTP。

  • OLAP

全称On-Line Analytical Processing,联机分析处理。比如一个周期内公司需要统计销售的报表,那么需要将所有商品的数据捞取,然后加上一定规则的业务逻辑处理形成报表。类似于这种侧重于分析的系统,简称为OLAP

目前我们使用的关系型数据库,支持OLTP。比如oracle、mysql、最近很火的postgreSQL等,具备事务回滚操作,这些已经满足大部分需求。而OLAP涉及大批量数据操作且准实时的要求,是很多系统都面临的一个问题。目前来说,有了分布式数据库,比如Nosql、DRDS等这些是很适合使用的。因此为了让业务系统OLTP具备分析OLAP功能现在做法是,把OLTP与OLAP分开,独立运营。通过ETL将OLTP数据提取到OLAP数据库中,这样将业务系统与分析系统隔离,实现业务功能与技术上的一种平衡。


3.ETL设计


分为三个部分,数据提取-->数据清洗与转换-->数据加载。

  •  数据提取

从各个不同的数据源抽取到ODS(Operational Data Store, 操作型数据存储)中。这个过程就是将一个企业不同组织架构中的不同系统数据建立数据通信,然后按照统一的rest接口去获取数据。这个过程我理解的是,将不同数据模型的数据提取出来统一处理,变成我们可以操作的数据源。

但是问题来了,数据源存储系统各式各样。比如:mysql、oracle、sql server或者内存库等。那么分为以下几类:

         1> 数据源存储与数据仓库存储方式相同

这个一般可以通过数据库的数据驱动(服务)建立链接。这里不建议做全量数据库数据同步,问题不在全量导入,而是在系统生产运行中会实时变更数据,还要做数据变更同步,这个开发代价是有点大的。

建议将数据源系统作为实时访问数据库,当然在不影响系统使用性能前提下(目前数据库产品应该都可以满足我们这个需求)。不过需要我们在逻辑设计上要精巧,避免大批量、请求次数过多等问题,对于后续处理是很有好处的,应该在设计开发最初就考虑到,以规避问题。

个人建议最优方案,第一步利用第三方数据迁移工具(效率和安全性很高)做一个整体库数据迁移,建立自己的数据仓库。然后基于侧做数据的清理和转化,到最后的数据分析等;第二步定期同步数据。因为在获取了99%+的存量数据时,剩下的变更数据对与我们的数据分析影响不大,但是为了准确性,我们定期自动做一次全量同步。

         2> 数据源存储与数据仓库存储方式不同

建议对数据库组件接口做一个公共封装;再次方案是存入文件系统。

         3> 其他数据存储方式

自己封装接口或者利用第三方工具实现导入。

  • 数据清洗与转换

根据前期市场调研,分析业务,形成核心业务文档。基于此对提取的做一些处理,清理垃圾数据、填充缺省值等操作。数据清洗这部分其实python中pandas、numpy等结合起来很好解决。

但是数据转化这部分还是很麻烦的。麻烦的地方主要是需求太多、太灵活,无法形成公共模块。比如空值处理、规范化数据格式、拆分数据、验证数据合法性、数据替换、实现数据规则过滤、数据排序、数据类型统一转换等等。转化方案一般有两个:

          1> 开发公共接口

通过代码提取数据,然后按照需求做转化。这个可以灵活支撑需求,并且性能可控(可通过增加配置去解决性能)。

          2> 利用数据库本身处理

mysql和oracle都支持存储过程,这个开发过程很简单。但是会影响数据库性能!

数据库核心目的是做数据存储的,一直认为不要把计算和处理能力交给数据库。但是大多数银行、电信运营商等这些系统都大量使用了存储过程,导致的就是数据库的性能大大下降。因此在框架设计之初就应该规避这个问题,多搬几块儿砖就能解决的事儿,益处非凡,后边产品扩展和优化就会尝到甜头。

  • 数据加载

按照前两步,将加工的数据存入数据仓库。

ETL总结(扫盲版)的更多相关文章

  1. SmartCode.ETL 这不是先有鸡还是蛋的问题!

    继国庆节 SmartCode 正式版(SmartCode.Generator)发布之后,SmartCode 迎来了新的能力 SmartCode.ETL ! SmartCode 正式版从开始发布就从未说 ...

  2. 10万级etl批量作业自动化调度工具Taskctl之轻量级Web应用版

    什么是批量作业: 批量处理是银行业整个信息后台最为重要的技术形态,也是银行核心信息资产数据的分享.传输.演化的重要技术手段.有调查指出,全球70%的数据是经过批量处理得以再次使用,可见批量处理在整个信 ...

  3. 推荐:国产etl调度工具Taskctl web应用版,0元永久授权

    写在前面 2020年疫情席卷全球,更是对整个市场经济造成了严重影响,年初疫情肆虐,西方世界单方面的科技.经济封锁,国际关系吃紧.....导致很多中小型企业业务链受阻,大型企业经费资金吃紧,轮班制导致公 ...

  4. 10万级etl调度软件Taskctl-web版免费授权及产品功能特性

    转: 10万级etl调度软件Taskctl-web版免费授权及产品功能特性 初识Taskctl-Web版 Taskctl Free应用版原型是在原有商用版Taskctl 6.0衍生扩展开发出的专门为批 ...

  5. [转载]敏捷开发之Scrum扫盲篇

    现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP...      为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述S ...

  6. 五一干货来袭!开源Moon.Orm标准版发布!

    标准版源代码下载: 链接:http://pan.baidu.com/s/1i3xj0f7 因五一早过(现在中旬了),解压码获取请到: http://www.cnblogs.com/humble/p/3 ...

  7. 敏捷开发之Scrum扫盲篇

    现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中 ...

  8. 成功部署SSIS中含有Oracle数据库连接的ETL包

    RT,正式写之前,我想说,真TMD不容易!!! 写博客,责任心,很重要 在百度搜出来的内地博客技术文章(CSDN.ITEYE.CNBLOGS……),大部分都是不全面,只针对一个遇到的问题点的记录,可以 ...

  9. 采用ETL with RDBMS模式来实现ETL

    目前Teradata数据仓库的ETL作业采用ELT方式, 因为loading太重了, 需要将ETL压力转移到专门的ETL Server上. 对于ETL工具, 市场上已有很成熟的商业/开源工具, 比如I ...

随机推荐

  1. java中的Collection集合类

    随着1998年JDK 1.2的发布,同时新增了常用的Collections集合类,包含了Collection和Map接口.而Dictionary类是在1996年JDK 1.0发布时就已经有了.它们都可 ...

  2. Nginx location配置详细解释

    nginx location配置详细解释 语法规则: location [=|~|~*|^~] /uri/ { - } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 ur ...

  3. HDU - 1430 魔板 (bfs预处理 + 康托)

    对于该题可以直接预处理初始状态[0, 1, 2, 3, 4, 5, 6, 7]所有可以到达的状态,保存到达的路径,直接打印答案即可. 关于此处的状态转换:假设有初始状态为2,3,4,5,0,6,7,1 ...

  4. Appium疑难杂症

    坑之初体验 在Appium的初体验中,遇到了一些坑坑洼洼.将他们记录下来,以后方便查阅. 1. session大于60秒没接收到命令自动关闭 通过Appium-Python-Client连接到appi ...

  5. 普通权限拿webshell

    普通权限拿webshell:   1.0day拿webshell:这个不多说.可以去网上搜索一些, 比如你找到你搞的网站cms是discz的,你可以搜索一些相 关0day直接拿   2.修改网站上传类 ...

  6. ubuntu16.04卸载软件

    root@test:/# dpkg -l | grep cobbler root@test:/# sudo dpkg --purge cobbler

  7. Android 进程常驻、进程守护、进程保活技术的总结

    转载自:http://blog.csdn.net/marswin89/article/details/50917098 这是一个轻量级的库,配置几行代码,就可以实现在Android上实现进程常驻,也就 ...

  8. Linux 的进程状态

    (1)运行:当一个进程在处理机上运行时,则称该进程处于运行状态.处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个.在没有其他进程可以执行时(如所有进程都在阻塞状 ...

  9. jlink烧写Nor Flash时出错正确解决方法汇总:PC of target system has unexpected value after programming

    成都国嵌的课程:国嵌体验入门班-2-1(开发板系统安装-Jlink方式).rar毒害了不少人,那种直接烧写nor flash,不进行任何配置的方法,能够成功纯属偶然,他自己在视频中烧写时也出现了两次错 ...

  10. Linux显示机器的处理器架构

    Linux显示机器的处理器架构 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ arch x86_64 youhaidong@youhaidong-ThinkP ...