目前Teradata数据仓库的ETL作业采用ELT方式, 因为loading太重了, 需要将ETL压力转移到专门的ETL Server上. 对于ETL工具, 市场上已有很成熟的商业/开源工具, 比如Informatica的PowerCenter, IBM的Datastage, 开源的Kettle.
下面是我自己的一些思考, 出发点是, 如何花比较小的代价将ELT模式切换到ETL模式. 我的推荐是:
采用ETL with RDBMS模式, 而不是传统的ETL工具. ETL with RDBMS这个词是我仿照SQL on Hadoop 造的, 我觉得很形象. 我们没有必要重新造*, 一个ETL和DB的组合就可以. 在这个组合中, ETL工具不需要有很强大的Transform功能, 只要有高效的Extract和Load功能即可, RDBMS需要有强大的SQL支持. 目前看比较好的一个选择是 SSIS + SQL Server 企业版, 这个组合License费用不高; 另一个更廉价的组合是Kettle + PostgreSQL.
Kettle我没有使用经验, 以下以SSIS说明该方案的一些特点:
1. 高效的E和L的性能
微软官网提供 Oracle 和 Teradata 专门的SSIS connector, download link(http://www.microsoft.com/en-us/download/details.aspx?id=29283).
2. 更小的迁移efforts
复杂ELT作业的迁移思路, 可以采用 ELT+EL 来做 ETL. 第1个ELT,完成数据抽取到SQL Server, 然后在SQL Server中使用SQL来做Transform, 这个SQL可以借鉴原Teradata中的SQL. 第2个EL, 将抽取转换后的结果数据到Teradata.
3. 更低的费用
Informatic 高级版的list price(1-core)大约为8万美元, IBM datastage的list price(1-core)大概是19万美元, 而SQL Server 2012企业版的list price(1-core)大概是7千美元, SSIS 是SQL Server企业版中内置的ETL工具, 无需专门的License.
4. 开发环境: 架构在Visual Studio 之上的作业设计器, 甩其他ETL tools几条大街
5. 扩展容易: 可以使用流行的C#/VB.NET语法来完成某些特殊的处理要求
6. 基于文件的作业载体: 每个作业本身就是一个文件, 部署容易, 天然适合做版本管理
7. 更强大的社区, 更丰富的文档(MSDN): 一般问题网上就能找到解决方法
8. Top down的作业设计思路: 更符合开发人员的思维习惯
我们在回过头来看看ETL工具宣称的优点:
1. 友好的作业设计界面(可视化拖拉组件)
ETL工具的用户往往是IT开发人员, 对他们而言, SQL的可读性往往比可视化的组件更友好
2. 扩展性
高端的ETL工具都宣称自己有比较好的线性扩展性. 经我测试, Datastage扩展性体现的还不错, PowerCenter没有体现出. ETL with RDBMS 这个方案因为计算引擎用的是RDBMS, 所以不具备线性扩展性. 但我个人认为线性扩展性意义其实并不大, 在绝大多少情况下, 单节点DB性能是足够的. 我反倒觉得如果能将多个ETL 作业压力平摊到几个ETL节点上, 意义更大, 这个粗粒度的负载均衡可以借助调度来实现, 难度并不大.
考虑到需要多个ETL Server, 所以采用传统的SSIS的package deployment model, 而不是SSIS 2012默认的project deployment model. Project deployment模式需要在SQL Server上创建SSISDB数据库.