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. 03 JVM的垃圾回收机制

    1.前言 理解JVM的垃圾回收机制(简称GC)有什么好处呢?作为一名软件开发者,满足自己的好奇心将是一个很好的理由,不过更重要的是,理解GC工作机制可以帮助你写出更好的Java程序. 在学习GC前,你 ...

  2. Flask從入門到入土(二)——請求响应與Flask扩展

    ———————————————————————————————————————————————————————————— 一.程序和請求上下文 Flask從客戶端收到請求時,要讓視圖函數能訪問一些對象 ...

  3. 自动提取文章摘要AutoSummary

    在文本搜索引擎项目中,需要对已排序的文章进行摘要提取,然后与标题,路径一起封装成Json数据返回客户端.因此这里我自己写一个自动摘要,来大概完成这个任务.在自动摘要提取过程中,使用了一个分词库:Cpp ...

  4. 使用DirectDraw直接显示YUV视频数据

    最近在编写一个进行视频播放的ActiveX控件,工作已经接近尾声,现将其中显示YUV数据的使用DirectDraw的一些经验总结如下:(解码部分不是我编写的,我负责从网络接收数据,将数据传给解码器,并 ...

  5. 奶瓶beini系统

    奶瓶(beini)这个系统,是一款基于 Tiny Core Linux 搭建的无线网络安全测试系统,当然由于它是用来安全测试的系统,因此在安全方面自然有着强大的功能.而且,这个系统非常简便易学,因此现 ...

  6. An internal error occurred during: "Building workspace". java.lang.StackOverflowError

    1 错误描述 2 错误原因 由上述描述可以,MyEclipse可用内存不足,导致堆内存溢出 3 解决办法 修改MyEclipse内存设置 #utf8 (do not remove) #utf8 (do ...

  7. Jquery常用操作:checkbox、select取值,radio、checkbox、select选中及其相关

    常用Jquery操作:checkbox取值.select取值.radio选中.checkbox选中.select选中及其相关: 1.影藏页面元素 使用jquery真的很方便,比如要控制div的显示与隐 ...

  8. Java中常见的Exception种类

    Java中常见的Exception种类 1.ClassNotFoundException 2.IOException 3.NoSuchFieldException 4.NoSuchMethodExce ...

  9. Intel_CS_WebRTC 验证性测试

      机器: Centos 7.2 一.配置阿里云源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/Cen ...

  10. css 超出规定行数自动隐藏

     单行overflow: hidden;text-overflow: ellipsis;white-space: nowrap;  多行(兼容各个浏览器)//通过覆盖最后几个字的形式p{positio ...