工具下载: 去公众号 “taskctl” 回复内容 “ 支付 ” 或 “ 软件 ” 即可
介绍:
ETL 负责将散布的、异构数据源中的数据如关系数据、立体数据文件等抽取到长期中间层后进行荡涤、转换、集成,最初加载到数据仓库或数据集市中,成为联机剖析解决、数据挖掘的根底。ETL 是数据仓库中的十分重要的一环。
它是承前启后的必要的一步。绝对于关系数据库,数据仓库技术没有严格的数学实践根底,它更面向理论工程利用。所以从工程利用的角度来思考,依照物理数据模型的要求加载数据并对数据进行一些系列解决,处理过程与教训间接相干,同时这部分的工作间接关系数据仓库中数据的品质,从而影响到联机剖析解决和数据挖掘的后果的品质。
ETL 中的关键技术
ETL 过程中的次要环节就是数据抽取、数据转换和加工、数据装载。为了实现这些性能,各个 ETL 工具个别会进行一些性能上的裁减,例如: 工作流、调度引擎、规定引擎、脚本反对、统计信息等。
数据抽取
数据抽取是从数据源中抽取数据的过程。理论利用中,数据源较多采纳的是关系数据库。从数据库中抽取数据个别有以下几种形式。
(1) 全量抽取
全量抽取相似于数据迁徙或数据复制,它将数据源中的表或视图的数据一成不变的从数据库中抽取进去,并转换成本人的 ETL 工具能够辨认的格局。全量抽取比较简单。
(2) 增量抽取
增量抽取只抽取自上次抽取以来数据库中要抽取的表中新增或批改的数据。
在 ETL 应用过程中。增量抽取利用较全量抽取利用更宽泛。如何捕捉变动的数据是增量抽取的要害。对捕捉办法个别有两点要求:准确性,可能将业务零碎中的变动数据按肯定的频率精确地捕捉到;性能,不能对业务零碎造成太大的压力,影响现有业务。
目前增量数据抽取中罕用的捕捉变动数据的办法有:
a. 触发器: 在要抽取的表上建设须要的触发器,个别要建设插入、批改、删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变动的数据写入一个长期表,抽取线程从长期表中抽取数据,长期表中抽取过的数据被标记或删除。触发器形式的长处是数据抽取的性能较高,毛病是要求业务表建设触发器,对业务零碎有肯定的影响。
b. 工夫戳: 它是一种基于快照比拟的变动数据捕捉形式,在源表上减少一个工夫戳字段,零碎中更新批改表数据的时候,同时批改工夫戳字段的值。当进行数据抽取时,通过比拟零碎工夫与工夫戳字段的值来决定抽取哪些数据。有的数据库的工夫戳反对自动更新,即表的其它字段的数据产生扭转时,自动更新工夫戳字段的值。有的数据库不反对工夫戳的自动更新,这就要求业务零碎在更新业务数据时,手工更新工夫戳字段。
同触发器形式一样,工夫戳形式的性能也比拟好,数据抽取绝对分明简略,但对业务零碎也有很大的倾入性(退出额定的工夫戳字段),特地是对不反对工夫戳的自动更新的数据库,还要求业务零碎进行额定的更新工夫戳操作。另外,无奈捕捉对工夫戳以前数据的 delete 和 update 操作, 在数据准确性上受到了肯定的限度。
c. 全表比对: 典型的全表比对的形式是采纳 MD5 校验码。ETL 工具当时为要抽取的表建设一个构造相似的 MD5 长期表,该长期表记录源表主键以及依据所有字段的数据计算出来的 MD5 校验码。每次进行数据抽取时,对源表和 MD5 长期表进行 MD5 校验码的比对,从而决定源表中的数据是新增、批改还是删除,同时更新 MD5 校验码。
MD5 形式的长处是对源零碎的倾入性较小(仅须要建设一个 MD5 长期表),但毛病也是不言而喻的,与触发器和工夫戳形式中的被动告诉不同,MD5 形式是被动的进行全表数据的比对,性能较差。当表中没有主键或惟一列且含有重复记录时,MD5 形式的准确性较差。
d. 日志比照: 通过剖析数据库本身的日志来判断变动的数据。Oracle 的数据捕捉(CDC,Changed Data Capture)技术是这方面的代表。CDC 个性是在 Oracle9i 数据库中引入的。CDC 可能帮忙你辨认从上次抽取之后发生变化的数据。
利用 CDC,在对源表进行 insert、update 或 delete 等操作的同时就能够提取数据,并且变动的数据被保留在数据库的变动表中。这样就能够捕捉发生变化的数据,而后利用数据库视图以一种可控的形式提供给指标零碎。CDC 体系结构基于发布者 / 订阅者模型。发布者捕获变动数据并提供给订阅者。订阅者应用从发布者那里取得的变动数据。
通常,CDC 零碎领有一个发布者和多个订阅者。发布者首先须要辨认捕捉变动数据所需的源表。而后,它捕获变动的数据并将其保留在特地创立的变动表中。它还使订阅者可能管制对变动数据的拜访。订阅者须要分明本人感兴趣的是哪些变动数据。一个订阅者可能不会对发布者公布的所有数据都感兴趣。订阅者须要创立一个订阅者视图来拜访经发布者受权能够拜访的变动数据。CDC 分为同步模式和异步模式,同步模式实时的捕捉变动数据并存储到变动表中,发布者与订阅都位于同一数据库中。异步模式则是基于 Oracle 的流复制技术。
ETL 解决的数据源除了关系数据库外,还可能是文件,例如 txt 文件、excel 文件、xml 文件等。对文件数据的抽取个别是进行全量抽取,一次抽取前可保留文件的工夫戳或计算文件的 MD5 校验码,下次抽取时进行比对,如果雷同则可疏忽本次抽取。
数据转换和加工
从数据源中抽取的数据不肯定齐全满足目标库的要求,例如数据格式的不统一、数据输出谬误、数据不残缺等等,因而有必要对抽取出的数据进行数据转换和加工。
数据的转换和加工能够在 ETL 引擎中进行,也能够在数据抽取过程中利用关系数据库的个性同时进行。
(1)ETL 引擎中的数据转换和加工
ETL 引擎中个别以组件化的形式实现数据转换。罕用的数据转换组件有字段映射、数据过滤、数据荡涤、数据替换、数据计算、数据验证、数据加解密、数据合并、数据拆分等。这些组件如同一条流水线上的一道道工序,它们是可插拔的,且能够任意组装,各组件之间通过数据总线共享数据。
有些 ETL 工具还提供了脚本反对,使得用户能够以一种编程的形式定制数据的转换和加工行为。
(2) 在数据库中进行数据加工
关系数据库自身曾经提供了弱小的 SQL、函数来反对数据的加工,如在 SQL 查问语句中增加 where 条件进行过滤,查问中重命名字段名与目标表进行映射,substr 函数,case 条件判断等等。上面是一个 SQL 查问的例子。
select ID as USERID, substr(TITLE, 1, 20) as TITLE, case when REMARK is null then ‘ ‘ else REMARK end as CONTENT from TB_REMARK where ID > 100;
相比在 ETL 引擎中进行数据转换和加工,间接在 SQL 语句中进行转换和加工更加简略清晰,性能更高。对于 SQL 语句无奈解决的能够交由 ETL 引擎解决。
数据装载
将转换和加工后的数据装载到目标库中通常是 ETL 过程的最初步骤。装载数据的最佳办法取决于所执行操作的类型以及须要装入多少数据。当目标库是关系数据库时,一般来说有两种装载形式:
- 间接 SQL 语句进行 insert、update、delete 操作。
- 采纳批量装载办法,如 bcp、bulk、关系数据库特有的批量装载工具或 api。
大多数状况下会应用第一种办法,因为它们进行了日志记录并且是可复原的。然而,批量装载操作易于应用,并且在装入大量数据时效率较高。应用哪种数据装载办法取决于业务零碎的须要。
ETL 工具综合比照表:
工具链接: 关注公众号 “taskctl” 回复内容 “ 支付 ” 或 “ 软件 ” 即可
最初
当初有很多成熟的工具提供 ETL 性能,且不说他们的好坏。
从利用角度来说,ETL 的过程其实不是非常复杂,这些工具给数据仓库工程带来了很大的便利性,特地是开发的便当和保护的便当。但另一方面,开发人员容易迷失在这些工具中。举个例子,VB 是一种非常简单的语言并且也是十分易用的编程工具,上手特地快,然而真正 VB 的高手有多少?
微软设计的产品通常有个准则是 “将使用者当作傻瓜”,在这个准则下,微软的货色的确十分好用,然而对于开发者,如果你本人也将本人当作傻瓜,那就真的傻了。ETL 工具也是一样,这些工具为咱们提供图形化界面,让咱们将次要的精力放在规定上,以期进步开发效率。从应用成果来说,的确应用这些工具可能十分疾速地构建一个 job 来解决某个数据,不过从整体来看,并不见得他的整体效率会高多少。
问题次要不是出在工具上,而是在设计、开发人员上。他们迷失在工具中,没有去探究 ETL 的实质。能够说这些工具利用了这么长时间,在这么多我的项目、环境中利用,它必然有它胜利之处,它必然体现了 ETL 的实质。
如果咱们不透过外表这些工具的简略应用去看它背地蕴涵的思维,最终咱们作出来的货色也就是一个个独立的 job,将他们整合起来依然有微小的工作量。大家都晓得 “实践与实际相结合”,如果在一个畛域有所超过,必须要在实践程度上达到肯定的高度. 人肯定要靠本人!