ETL总结(扫盲版)
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总结(扫盲版)的更多相关文章
- SmartCode.ETL 这不是先有鸡还是蛋的问题!
继国庆节 SmartCode 正式版(SmartCode.Generator)发布之后,SmartCode 迎来了新的能力 SmartCode.ETL ! SmartCode 正式版从开始发布就从未说 ...
- 10万级etl批量作业自动化调度工具Taskctl之轻量级Web应用版
什么是批量作业: 批量处理是银行业整个信息后台最为重要的技术形态,也是银行核心信息资产数据的分享.传输.演化的重要技术手段.有调查指出,全球70%的数据是经过批量处理得以再次使用,可见批量处理在整个信 ...
- 推荐:国产etl调度工具Taskctl web应用版,0元永久授权
写在前面 2020年疫情席卷全球,更是对整个市场经济造成了严重影响,年初疫情肆虐,西方世界单方面的科技.经济封锁,国际关系吃紧.....导致很多中小型企业业务链受阻,大型企业经费资金吃紧,轮班制导致公 ...
- 10万级etl调度软件Taskctl-web版免费授权及产品功能特性
转: 10万级etl调度软件Taskctl-web版免费授权及产品功能特性 初识Taskctl-Web版 Taskctl Free应用版原型是在原有商用版Taskctl 6.0衍生扩展开发出的专门为批 ...
- [转载]敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述S ...
- 五一干货来袭!开源Moon.Orm标准版发布!
标准版源代码下载: 链接:http://pan.baidu.com/s/1i3xj0f7 因五一早过(现在中旬了),解压码获取请到: http://www.cnblogs.com/humble/p/3 ...
- 敏捷开发之Scrum扫盲篇
现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中 ...
- 成功部署SSIS中含有Oracle数据库连接的ETL包
RT,正式写之前,我想说,真TMD不容易!!! 写博客,责任心,很重要 在百度搜出来的内地博客技术文章(CSDN.ITEYE.CNBLOGS……),大部分都是不全面,只针对一个遇到的问题点的记录,可以 ...
- 采用ETL with RDBMS模式来实现ETL
目前Teradata数据仓库的ETL作业采用ELT方式, 因为loading太重了, 需要将ETL压力转移到专门的ETL Server上. 对于ETL工具, 市场上已有很成熟的商业/开源工具, 比如I ...
随机推荐
- tomcat使用cookies缓存的时候中文报错解决办法 java.lang.IllegalArgumentException: Control character in cookie value or attribute.
报错出现 java.lang.IllegalArgumentException: Control character in cookie value or attribute. at org.apac ...
- yii2 查询构建器
Query Builder $rows = (new \yii\db\Query()) ->select(['dyn_id', 'dyn_name']) ->from('zs_dynast ...
- 浏览器输入URL到响应页面的全过程
B/S网络架构从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,HTTP协议采用无状态的短链接的通信方式,通常情况下,一次请求就完成了一次数据交互,通常也对应一个业务逻辑,然后这次通 ...
- 【spring-boot】spring aop 面向切面编程初接触
众所周知,spring最核心的两个功能是aop和ioc,即面向切面,控制反转.这里我们探讨一下如何使用spring aop. 1.何为aop aop全称Aspect Oriented Programm ...
- WeakHashMap回收时机结合JVM 虚拟机GC的一些理解
一直很想知道WeakHashMap的使用场景,想来想去只能用在高速缓存中,而且缓存的数据还不是特别重要,因为key(key不存在被引用的时候)随时会被回收 所以研究了一下WeakHashMap的回收时 ...
- CEPH RGW 设置 user default_placement为ssd-placement,优化100KB-200KB小文件性能,使用户创建的bucket对象放置到 SSD设备的Pool上。
sudo radosgw-admin metadata get user:tuanzi > user.md.json vi user.md.json #to add ssd-placement ...
- spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理
在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作. 据我所知,原因大概有这样两个: 一个是,一般情况下系统服 ...
- 顺便说说webservice
webservice这玩意框架也挺多的.就这玩意我知道cxf,axis2,jersey.通过jdk也能产生webservie.感觉这东西太多,有时间知道点就写点吧.先挖坑在此
- apache配置,禁止ip访问web站点
由于一台服务器上面部署了好几个应用,对应不同的域名,如果用户知道ip地址的话,直接用户ip地址访问,会显示第一个虚拟主机的页面(更改了虚拟主机的顺序,每次都是显示第一个).这样对用户造成不好的印象,所 ...
- 父页面(JSP页面)传参数到子页面(JSP页面)
父页面(JSP页面)传参数到子页面(JSP页面) 1.父页面传参数到子页面 //JavaScript代码 $.ajax({ type:"POST", uri:"../st ...