我们可以不再使用ETL了吗?
Ⓛ➦我们可以不再使用ETL了吗?
说到ETL,很多开发伙伴可能会有些陌生,我也是在近几年的工作过程中才接触到ETL的,现在的项目是比较依赖于ETL,可以说是项目中重要的一部分。
先看一看ETL是做什么用的:ETL是将各个业务系统的数据,通过抽取、清洗、转换之后,加载到数据仓库的过程;ETL可以将分散、零乱、标准不统一的数据整合到一起。完整的ETL功能有很多(ETL是三个三次的缩写...),我只从我实际使用的场景出发,说明我对ETL的理解和实际应用。
我接触过的项目,使用ETL工具的场景有这个几种:
报表、BI系统:
在公司建设的初期,业务比较少,系统也比较少,一台数据库就搞定了;
随着公司业务的增加,业务系统被拆成很多系统;
随着数据量的继续增加,单个系统的数据增加到一定程度的时候,也做了分库分表;
这时候领导、业务人员在用数据做分析的时候,数据来源可能是多个系统的多张表,这时候企图通过一个复杂的SQL跑出来结果就很困难了;通常公司会建立一个数据仓库,通过ETL工具把数据抽取到数据仓库中,再做数据的拟合和展示。
跨系统的数据加工或查询:
我们现在所在公司,业务系统有几百个,由于业务流程比较复杂,前端系统在做业务操作的时候,在正式提交交易之前,有很多业务校验;比如要查询客户在A系统的交易历史,在B系统的交易历史,在C系统的交易历史;那么就需要分别调用A、B、C系统的接口,这个对前端系统很不友好,那么通常的解决方案是什么?
学阿里,建中台,、把A/B/C系统合并成一个大中台,对外提供服务;这种方法很好,但是非常难;很多公司,别说把A/B/C合成一个系统了,就是A系统本身的重构,都非常地困难;
第二种方案,在前段系统和A/B/C系统之间,增加一层,可以叫做服务中台,它的作用是整合A/B/C系统的服务,然后对外提供一个服务给前端系统调用;好处是前端系统只需要调用服务中台的一个接口即可;
我们现在采用的是第三个方案,把A/B/C系统的数据,通过ETL抽取到一起,并通过Java把数据提前加工好,保存到MongoDB中的同一个Collection中(利用了MongoDB数据结构的特点);再对外提供服务的时候,相当于做了一次单表查询,就可以查询到三个系统的数据;好处是可以调一个接口查出三个系统的数据,并且缓解了三个系统的查询压力;
当然这个方案也有着一个很大的缺陷,就是有一定的延迟,需要根据业务场景进行评估,是否接受这个延迟。
ETL的工具也有不少,我们现在使用的是Informatica,这是收费的,开源的只接触过Kettle;
我们现在是根据数据表的时间戳,做增量抽取,在我看来,比较理想的方案是业务系统可以把数据“吐出来”,比如业务系统埋点发送MQ、MySQL可以监听binlog日志,不过在我们公司都非常难以实现;
所以,至少在我们项目,ETL是很难被替换掉的。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
✮↺我们可以不再使用ETL了吗?
目前来说是不行的,ETL任然是大数据时代下数据迁移不可缺少的
首先说一下什么是ETL,ETL是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。也就是说几乎所有的数据的移动都需要ETL的参与!
目前用到的ETL工具常见的有Datastage,informatica,kettle三种,前两者是收费的,并且占据了大多数国内市场,而kettle是来源免费的!但是在大数据量下Informatica 与Datastage的处理速度是比较快的,比较稳定。Kettle的处理速度相比之下稍慢。所以很多公司尤其是金融机构选Informatica 与Datastage。但是kettle由于是开源的所以有很强的扩展性。
数据要想有价值,就必须把它进行分析,挖掘出来它潜藏的价值,人们日常活动产生的数据一般是放在业务系统中,而在业务系统中的数据是不能直接进行分析处理的,这个时候我就得把这些数据搬运到一个仓库里,再进行分析!也就是所说的数据仓库,在而这个数据的搬运工就是ETL,在搬运的过程中我们还要做一些初步的清洗,去掉一些无用的不全的数据,这也是ETL的功能!最后我们那这些处理过的数据进行商业分析!这就是一个ETL的过程。
在数据就是价值的今天我们更加离不开ETL,当然这个过程也在不断的改进,运用也越来越智能越来越方便
©↝我们可以不再使用ETL了吗?
ETL的实现方式有多种,但是以下三种较为常见:
(1)ETL工具(如SQLServer2008的SSIS服务、Informatica,DataStage,Kettle等)实现;
(2)SQL方式实现(编码实现);
(3)ETL工具和SQL相结合。
目前我们常采用的方式就是第三种ETL工具和SQL相结合,他综合了ETL工具可以快速建立ETL工程的特点,摒弃了复杂的编码任务,提高了速度,同时也吸纳了SQL灵活的特点,可以提高ETL的运行效率,而且本身图形化简单便于操作,并且处理海量数据的速度、响应快,流程清晰便于查看,同时支持多种操作系统的部署,综上优势,可以让ETL的开发速度的效率得以极大的提高。
随着企业的不断发展壮大,数据的分析也会不断的多样化,这就导致数据的来源会是多个数据源,而这些数据源的数据也会是多样化的,例如事务性数据,时间序列和地理数据等,这些数据直接存储数仓是不行的,需要经过ETL进行数据的转换才能进入到数仓,而对于这些数据的处理,由于源数据库的存储方式各不相同,并且很多数据库相互独立(业务上是有关联的),必须关联后映射到数据仓库中,而且根据实际的情况进行特殊命名,梳理成数仓统一格式,而这部分工作就需要进行大量脚本的编制,而且随着业务的不断变化,形式也会发生改变,脚本也需要随之调整,这就导致企业需要投入更多的人力、物力、财力进行相应的维护和开发工作,给企业无形中添加了更大的压力。
对于ETL是否使用,其实需要根据企业的实际情况来定,对于业务相对较为成熟的大型企业,其业务发展相对较为固化,业务调整频率也不会太高,这个时候使用ETL就会更快的凸显其价值,而且能够通过ETL的使用,更好,更快的体现业务价值,而且由于业务改动频率较低,可以更好的发挥ETL的优势。而对于发展中的企业来说,没有更多的财力、人力进行投入,而且业务变化需要根据其发展情况不断调整,这个时候使用ETL就会成为企业的负担,加重企业的投入,但是为了满足企业分析的需求,我们可以选择一些ESB数据总线产品进行替代使用,可以对协议类、大数据、非格式化数据能更好的支持,同时能够更好适应企业频繁的业务变化,调整更为容易。
≆⏎我们可以不再使用ETL了吗?
肯定不行,而且ETL在未来的发展中,ETL工程师的作用还会更大。
先说说ETL是什么吧,数据的抽取、转换和加载。
你以为你最后给老板看的报表,就是把平时进入公司系统的数据稍微处理一下,就能上台面了?
别想太多!
需要经过很多的操作,而ETL却是必经的过程,只有把那些脏数据给清除掉,留下来的才是有用的数据,就拿阿里和腾讯来说,一天的数据量大的吓人,给两位马爸爸看,不得好好处理一下?
虽然被认为是苦X的职业之一,但是我会的多!
我懂各种数据库和接口,会搭hadoop,会写超复杂逻辑的sql(不是取数机),还负责数据仓库、数据建模、还有一些额外的运维工作,想想就有很多事情,没了我,你以为就是失去了一个普通员工?
你得再招好几个!
ETL工具现在有了很大的进步,随着实时数据的要求越来越大,份量会更足。
甚至有了这样的说法:ETL 是 SQL 人重启辉煌之光的必经之路。
ツ◙我们可以不再使用ETL了吗?
只要涉及到数据源的数据抽取、数据的计算和处理过程的开发,都是 ETL,ETL 就这三个阶段,Extraction 抽取,Transformation 转换,Loading 加载。
从不同数据源抽取数据 EXTRACTION ,按照一定的数据处理规则对数据进行加工和格式转换 TRASFORMATION,最后处理完成的输出到目标数据表中也有可能是文件等等,这个就是 LOADING。
再通俗一点讲,ETL 的过程就跟大家日常做菜一样,需要到菜市场的各个摊位买好菜,把菜买回来要摘一下,洗一洗,切一切最后下锅把菜炒好端到饭桌上。菜市场的各个摊位就是数据源,做好的菜就是最终的输出结果,中间的所有过程像摘菜、洗菜、切菜、做菜就是转换。
在开发的时候,大部分时候会通过 ETL 工具去实现,比如常用的像 KETTLE、PENTAHO、IBM DATASTAGE、INFORNAICA、微软 SQL SERVER 里面的 SSIS 等等,在结合基本的 SQL 来实现整个 ETL 过程。
也有的是自己通过程序开发,然后控制一些数据处理脚本跑批,基本上就是程序加 SQL 实现。
哪种方式更好,也是需要看使用场景和开发人员对那种方式使用的更加得心应手。我看大部分软件程序开发人员出身的,碰到数据类项目会比较喜欢用程序控制跑批,这是程序思维的自然延续。纯 BI 开发人员大部分自然就选择成熟的 ETL 工具来开发,当然也有一上来就写程序脚本的,这类 BI 开发人员的师傅基本上是程序人员转过来的。
用程序的好处就是适配性强,可扩展性强,可以集成或拆解到到任何的程序处理过程中,有的时候使用程序开发效率更高。难就难在对维护人员有一定的技术要求,经验转移和可复制性不够。
用 ETL 工具的好处,第一是整个 ETL 的开发过程可视化了,特别是在数据处理流程的分层设计中可以很清晰的管理。第二是链接到不同数据源的时候,各种数据源、数据库的链接协议已经内置了,直接配置就可以,不需要再去写程序去实现。第三是各种转换控件基本上拖拉拽就可以使用,起到简化的代替一部分 SQL 的开发,不需要写代码去实现。第四是可以非常灵活的设计各种 ETL 调度规则,高度配置化,这个也不需要写代码实现。
所以在大多数通用的项目中,在项目上使用 ETL 标准组件开发会比较多一些。
ETL 从逻辑上一般可以分为两层,控制流和数据流,这也是很多 ETL 工具设计的理念,不同的 ETL 工具可能叫法不同。
控制流就是控制每一个数据流与数据流处理的先后流程,一个控制流可以包含多个数据流。比如在数据仓库开发过程中,第一层的处理是ODS层或者Staging 层的开发,第二层是 DIMENSION维度层的开发,后面几层就是DW 事实层、DM数据集市层的开发。通过ETL的调度管理就可以让这几层串联起来形成一个完整的数据处理流程。
数据流就是具体的从源数据到目标数据表的数据转换过程,所以也有 ETL 工具把数据流叫做转换。在数据流的开发设计过程中主要就是三个环节,目标数据表的链接,这两个直接通过 ETL 控件配置就可以了。中间转换的环节,这个时候就可能有很多的选择了,调 SQL 语句、存储过程,或者还是使用 ETL 控件来实现。
有的项目上习惯使用 ETL 控件来实现数据流中的转换,也有的项目要求不使用标准的转换组件使用存储过程来调用。也有的是因为数据仓库本身这个数据库不支持存储过程就只能通过标准的SQL来实现。
我们通常讲的BI数据架构师其实指的就是ETL的架构设计,这是整个BI项目中非常核心的一层技术实现,数据处理、数据清洗和建模都是在ETL中去实现。一个好的ETL架构设计可以同时支撑上百个包就是控制流,每一个控制流下可能又有上百个数据流的处理过程。之前写过一篇技术文章,大家可以搜索下关键字 BIWORK ETL 应该在网上还能找到到这篇文章。这种框架设计不仅仅是ETL框架架构上的设计,还有很深的ETL项目管理和规范性控制器思想,包括后期的运维,基于BI的BI分析,ETL的性能调优都会在这些框架中得到体现。因为大的BI项目可能同时需要几十人来开发ETL,框架的顶层设计就很重要。
------------------
推荐阅读:
上一篇:沈阳倒闭的商场,以后会干什么用?
下一篇: “说曹操,曹操就到”是怎么来的?