共计 3777 个字符,预计需要花费 10 分钟才能阅读完成。
ETL 是将业务零碎的数据通过抽取、荡涤转换之后加载到数据仓库的过程,目标是将企业中的扩散、零乱、规范不对立的数据整合到一起,为企业的决策提供剖析根据。
ETL 是 BI 我的项目重要的一个环节。通常状况下,在 BI 我的项目中 ETL 会花掉整个我的项目至多 1 / 3 的工夫,ETL 设计的好坏间接关接到 BI 我的项目的成败。
ETL 的设计分三局部:数据抽取、数据的荡涤转换、数据的加载。在设计 ETL 的时候咱们也是从这三局部登程。数据的抽取是从各个不同的数据源抽取到 ODS (Operational Data Store,操作型数据存储) 中——这个过程也能够做一些数据的荡涤和转换,在抽取的过程中须要筛选不同的抽取办法,尽可能的进步 ETL 的运行效率。
ETL 三个局部中,破费工夫最长的是“T”(Transform,荡涤、转换) 的局部,个别状况下这部分工作量是整个 ETL 的 2 /3。数据的加载个别在数据荡涤完了之后间接写入 DW (Data Warehousing,数据仓库) 中去。
ETL 的实现有多种办法,罕用的有三种。一种是借助 ETL 工具 (如:Oracle 的 OWB、SQL Server 2000 的 DTS、SQL Server2005 的 SSIS 服务、Informatic 等) 实现,一种是 SQL 形式实现,另外一种是 ETL 工具和 SQL 相结合。
前两种办法各有各的优缺点,借助工具能够疾速的建设起 ETL 工程,屏蔽了简单的编码工作,进步了速度,升高了难度,然而短少灵活性。SQL 的办法长处是灵便,进步 ETL 运行效率,然而编码简单,对技术要求比拟高。第三种是综合了后面二种的长处,会极大地提高 ETL 的开发速度和效率。
数据的抽取(Extract)
这一部分须要在调研阶段做大量的工作,首先要搞清楚数据是从几个业务零碎中来, 各个业务零碎的数据库服务器运行什么 DBMS, 是否存在手工数据,手工数据量有多大,是否存在非结构化的数据等等,当收集完这些信息之后才能够进行数据抽取的设计。
对于与寄存 DW 的数据库系统雷同的数据源解决办法
这一类数据源在设计上比拟容易。个别状况下,DBMS (SQLServer、Oracle) 都会提供数据库链接性能,在 DW 数据库服务器和原业务零碎之间建设间接的链接关系就能够写 Select 语句间接拜访。
对于与 DW 数据库系统不同的数据源的解决办法
对于这一类数据源,个别状况下也能够通过 ODBC 的形式建设数据库链接——如 SQL Server 和 Oracle 之间。如果不能建设数据库链接,能够有两种形式实现,一种是通过工具将源数据导出成.txt 或者是.xls 文件,而后再将这些源系统文件导入到 ODS 中。另外一种办法是通过程序接口来实现。
对于文件类型数据源(.txt,.xls),能够培训业务人员利用数据库工具将这些数据导入到指定的数据库,而后从指定的数据库中抽取。或者还能够借助工具实现。
增量更新的问题
对于数据量大的零碎,必须思考增量抽取。个别状况下,业务零碎会记录业务产生的工夫,咱们能够用来做增量的标记, 每次抽取之前首先判断 ODS 中记录最大的工夫,而后依据这个工夫去业务零碎取大于这个工夫所有的记录。利用业务零碎的工夫戳,个别状况下,业务零碎没有或者局部有工夫戳。
数据的荡涤转换(Cleaning、Transform)
个别状况下,数据仓库分为 ODS、DW 两局部。通常的做法是从业务零碎到 ODS 做荡涤,将脏数据和不残缺数据过滤掉,在从 ODS 到 DW 的过程中转换,进行一些业务规定的计算和聚合。
数据荡涤
数据荡涤的工作是过滤那些不符合要求的数据,将过滤的后果交给业务主管部门,确认是否过滤掉还是由业务单位修改之后再进行抽取。
不符合要求的数据次要是有不残缺的数据、谬误的数据、反复的数据三大类。
(1)不残缺的数据:这一类数据次要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务零碎中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容别离写入不同 Excel 文件向客户提交,要求在规定的工夫内补全。补全后才写入数据仓库。
(2)谬误的数据:这一类谬误产生的起因是业务零碎不够健全,在接管输出后没有进行判断间接写入后盾数据库造成的,比方数值数据输成全角数字字符、字符串数据前面有一个回车操作、日期格局不正确、日期越界等。这一类数据也要分类,对于相似于全角字符、数据前后有不可见字符的问题,只能通过写 SQL 语句的形式找进去,而后要求客户在业务零碎修改之后抽取 。日期格局不正确的或者是日期越界的这一类 谬误会导致 ETL 运行失败,这一类谬误须要去业务零碎数据库用 SQL 的形式挑出来,交给业务主管部门要求限期修改,修改之后再抽取。
(3)反复的数据:对于这一类数据——特地是维表中会呈现这种状况——将反复数据记录的所有字段导出来,让客户确认并整顿。
数据荡涤是一个重复的过程,不可能在几天内实现,只有一直的发现问题,解决问题。对于是否过滤,是否修改个别要求客户确认,对于过滤掉的数据,写入 Excel 文件或者将过滤数据写入数据表,在 ETL 开发的初期能够每天向业务单位发送过滤数据的邮件,促使他们尽快地修改谬误, 同时也能够做为未来验证数据的根据。数据荡涤须要留神的是不要将有用的数据过滤掉,对于每个过滤规定认真进行验证,并要用户确认。
数据转换
数据转换的工作次要进行不统一的数据转换、数据粒度的转换,以及一些商务规定的计算。
(1)不统一数据转换:这个过程是一个整合的过程,将不同业务零碎的雷同类型的数据对立,比方同一个供应商在结算零碎的编码是 XX0001, 而在 CRM 中编码是 YY0001,这样在抽取过去之后对立转换成一个编码。
(2)数据粒度的转换:业务零碎个别存储十分明细的数据,而数据仓库中数据是用来剖析的,不须要十分明细的数据。个别状况下,会将业务零碎数据依照数据仓库粒度进行聚合。
(3)商务规定的计算:不同的企业有不同的业务规定、不同的数据指标,这些指标有的时候不是简略的加加减减就能实现,这个时候须要在 ETL 中将这些数据指标计算好了之后存储在数据仓库中,以供剖析应用。
ETL 日志、正告发送
ETL 日志
ETL 日志分为三类:
一类是执行过程日志,这一部分日志是在 ETL 执行过程中每执行一步的记录,记录每次运行每一步骤的起始工夫,影响了多少行数据,流水账模式。
一类是谬误日志,当某个模块出错的时候写谬误日志,记录每次出错的工夫、出错的模块以及出错的信息等。
第三类日志是总体日志,只记录 ETL 开始工夫、完结工夫是否胜利信息。如果应用 ETL 工具,ETL 工具会主动产生一些日志,这一类日志也能够作为 ETL 日志的一部分。
记录日志的目标是随时能够晓得 ETL 运行状况,如果出错了,能够晓得哪里出错。
正告发送
如果 ETL 出错了,不仅要造成 ETL 出错日志,而且要向系统管理员发送正告。发送正告的形式多种,个别罕用的就是给系统管理员发送邮件,并附上出错的信息,不便管理员排查谬误。
ETL 是 BI 我的项目的要害局部,也是一个长期的过程,只有一直的发现问题并解决问题,能力使 ETL 运行效率更高,为 BI 我的项目前期开发提供精确与高效的数据。
后记
做数据仓库零碎,ETL 是要害的一环。说大了,ETL 是数据整合解决方案,说小了,就是倒数据的工具。回顾一下工作这么长时间以来,解决数据迁徙、转换的工作倒还真的不少。然而那些工作基本上是一次性工作或者很小数据量。可是在数据仓库零碎中,ETL 回升到了肯定的实践高度,和原来小打小闹的工具应用不同了。到底什么不同,从名字上就能够看到,人家曾经将倒数据的过程分成 3 个步骤,E、T、L 别离代表抽取、转换和装载。
其实 ETL 过程就是数据流动的过程,从不同的数据源流向不同的指标数据。但在数据仓库中,
ETL 有几个特点:
一是数据同步,它不是一次性倒完数据就拉到,它是经常性的流动,依照固定周期运行的,甚至当初还有人提出了实时 ETL 的概念。
二是数据量,个别都是微小的,值得你将数据流动的过程拆分成 E、T 和 L。
当初有很多成熟的工具提供 ETL 性能,且不说他们的好坏。从利用角度来说,ETL 的过程其实不是非常复杂,这些工具给数据仓库工程带来和很大的便利性,特地是开发的便当和保护的便当。但另一方面,开发人员容易迷失在这些工具中。
举个例子,VB 是一种非常简单的语言并且也是十分易用的编程工具,上手特地快,然而真正 VB 的高手有多少?微软设计的产品通常有个准则是“将使用者当作傻瓜”,在这个准则下,微软的货色的确十分好用,然而对于开发者,如果你本人也将本人当作傻瓜,那就真的傻了。
ETL 工具也是一样,这些工具为咱们提供图形化界面,让咱们将次要的精力放在规定上,以期进步开发效率。从应用成果来说,的确应用这些工具可能十分疾速地构建一个 job 来解决某个数据,不过从整体来看,并不见得他的整体效率会高多少。
问题次要不是出在工具上,而是在设计、开发人员上。他们迷失在工具中,没有去探究 ETL 的实质。能够说这些工具利用了这么长时间,在这么多我的项目、环境中利用,它必然有它胜利之处,它必然体现了 ETL 的实质。
如果咱们不透过外表这些工具的简略应用去看它背地蕴涵的思维,最终咱们作出来的货色也就是一个个独立的 job,将他们整合起来依然有微小的工作量。大家都晓得“实践与实际相结合”,如果在一个畛域有所超过,必须要在实践程度上达到肯定的高度.