目前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, 所以不具备线性扩展性. 但我个人认为线性扩展性意义其实并不大, 如果能做到将多个ETL 作业压力平摊到几个ETL节点上, 意义更大, 这个粗粒度的负载均衡可以借助调度来实现, 难度并不大.
考虑到需要多个ETL Server, 所以采用传统的package deployment model, 而不是SSIS 2012默认的project deployment model. Project 部署模式需要在SQL Server上创建SSISDB数据库.