ETL工具还是手工编码
(购买工具集还是自己写程序?)
在《智能企业》杂志的一篇精彩的文章(2003.5.31,Ralph Kimball编辑)中,Gary Nissen对这个问题总结概括后,回答是:“看情况”。我们展开来分析一下Gary的观点。基于ETL工具的优势
根据某个ETL工具厂商的说法:“一个有价值的工具目的不在于能够解决琐碎的问题,而是要将不可能的事情变得可能。”
开发过程简单、快速、低成本。如果项目足够大或足够复杂,工具的成本会显得微不足道。 了解业务知识但不精通编程的技术人员也能够有效使用ETL工具。
很多ETL工具内部集成了元数据资料库,这样,源系统、目标数据库以及其他BI工具的元数据既可以同步到这个元数据资料库中。
大多数ETL工具在每个处理流程会自动产生元数据,从而强制所有的开发人员必须遵循一致的元数据驱动的方法论。
大多数ETL工具都有内置的调度器,帮助生成文档、简化创建过程以及变更管理。如果系统发生故障,ETL 工具会负责处理全部复杂的依赖关系以及差错控制。 ETL 工具的元数据资料库能够自动的产生数据沿袭(便于反查)和数据依赖分析(便于前查)。
ETL工具为大多数源和目标系统设有预置的连接器。在技术层面,ETL工具应当处理能够处理全部种类的数据类型转换。
ETL工具通常提供内嵌的加密和压缩功能。.
大多数ETL工具处理大数据集时具有较高性能。如果数据量非常巨大,或者在未来几年可能会非常巨大,那么应该考虑采用ETL工具。
ETL工具可以跨服务器的复杂的负载均衡,避免服务器死锁。
当底层框架变更时,会对后续流程和应用造成影响,大多数ETL工具可以自动的进行这种“变更-冲击”分析。
在指定的处理模块中,ETL 工具可以使用编程语言进行扩展。比如,如果其自带的模块不能达到要求的功能和性能,就可以在ETL工具的数据流程中添加一个自定义的CRC(循环冗余校验)算法;或者,将一个自定义的周期算法作为数据质量检查步骤的一部分加入进去,以判断某个观测值是否合理,等等。
手工编码方式的优势
在手工编码方式下可使用自动单元检测工具。比如,JUnit 库(www.junit.org)是一个著名的、良好支持Java编写单元测试程序的工具,对其他语言也有一些类似的包。你可以使用某一个脚本语言,比如TCL或者Python来设置测试数据,在ETL过程中运行,然后验证结果。采用这些自动化测试流程能够极大的提高QA人员的工作效率和最终提交版本的质量。
面向对象的编程技术可以帮助你保持差错报告、有效性和元数据更新的转换一致性。
如果建立了自己的元数据访问接口,手工编码方式可以更直接的管理元数据。
对ETL系统的简要需求分析可以指导你快速使用基于文件的流程,而非数据库的存储过程。基于文件的处理流程要更加直接,编码更简单,测试更容易,也更便于理解。
可以不必考虑用户许可证问题。
可充分利用内部的编程人员。
基于某个工具的开发使你只局限于某个工具厂商的工具及其特殊的脚本语言。手工编码方式的系统可使用通用的编程语言。(公平的讲,所有ETL工具在各自的模块中都与标准的编程语言隔离开。)
手工编码方式可以提供无限的灵活性,几乎可以完成任何想做的事情,当然前提是你确实需要这样。很多情况下,一种独特的方法或一种特定的语言可以提供非常的优势。
这里我们还可以为采用ETL工具提出新的理由:ETL工具自动完成文档的能力更强,可维护性更高,尤其是IT 人员流失较严重的情况下。而反方的观点是,如果ETL开发小组有很强的软件开发能力,并且管理良好,文档和维护性不应当是一个大问题。
使用已证实的技术
建立数据仓库时许多初始成本是无法避免的。比如必须购买一些专用的服务器:至少一台数据库服务器,一台BI服务器,通常还有一台专用的ETL服务器。同时还需要数据库的许可证,BI工具的用户许可证。在开始一个新的项目时可能还需要购买一些咨询服务以及其他的一些成本。建立数据仓库的这些成本是必须要花费的。
但是,有一种成本通常被认为是可有可无,并经常作为成本消减的目标——这就是购买一个专门的ETL工具。不用ETL工具实现数据仓库是可能的,在此也没有假定用户必须使用或不使用ETL 工具。但是,从长远上看,购买ETL工具对于建立和维护数据仓库来讲是降低成本的。使用已经证明的ETL技术有一些特别的优势:
一次定义,多次使用。通过共享并重用业务规则和结构化程序,保持数据仓库中数据的一致性。
冲击分析。判断哪些表、列、过程会由于某些修改而受到影响。
元数据资料库。轻松地创建、维护和发布数据沿袭,继承数据建模工具中的业务定义,在BI工具中展现元数据。
增量聚合。动态更新聚合表,只将最新的和修改过的数据加入到聚合表中,而无需在每次数据加载时重建聚合表。
管理批处理加载。减少Shell脚本,执行条件加载,加载统计,自动Email通知等等。
轻松连接到多种复杂数据源,如SAP和主机系统等。
并发执行多线程操作。
供应商经验,包括针对维度模型的成功经验和数据仓库支持方面的记录跟踪。
与能够用到ETL工具的很多高级特性相比,购买一个ETL工具更重要的理由是可以帮助避免走太多的弯路。这些ETL工具的设计基于一个目的:准确执行用户想要完成的工作——加载数据仓库。大多数工具已经发展成为能够支持从不同的异构数据源抽取数据、完成复杂的数据转换、加载维度数据仓库的稳定、强大的ETL引擎, 在ETL配置中不要加入新的、未经测试的产品。像月度仪表盘这样的功能尽管很吸引最终用户,但若放在后台就太不计后果了。保守一些,等待ETL产品的成熟。与那些具有良好记录的厂商配合,确保在将来的5年中会不断的支持和完善这些产品。