ETL 与并行执行
Greenplum 和 Aster Data 都已经宣称自己成功将MapReduce 集成进自己的数据库产品中, 从而都宣称自己的产品比其他竞争对手快至少10倍以上, 并且都雄心勃勃的要进入PB 级数据仓库行列,而作为商业智能另外一个重要领域的ETL工具又有多少手段能够并行执行它们的ETL任务呢?
- 第一种方式当然是MapReduce , 通过建立一个MapReduce 的集群, 然后再通过手工编程的方式用JDBC或ODBC 进行数据库操作, 至少听起来可行,不过不知道有没有人真正试过.
- 使用某种编程ETL API, 开源的ETL编程型ETL API Clover ETL 宣称自己是具有并行执行能力的,通过多线程模型和管道并行(pipeline-parallelism) 是可以很容易伸缩的. 而在另一个文章中读到Pervasive Software 也提供一个商业编程ETL API 可以很容易并行执行ETL任务, 它的性能上的突出特性包括延迟加载(late-binding) 动态决定并行执行度,既根据你服务器启动时收集到的CPU 数量和内存数量来动态决定开多少线程,并行执行策略等等, 这个公司同时也有自己的ETL GUI设计工具和数据清理工具Data profile (本来打算下来看看的,结果注册的时候即使假装自己是美国的都违反什么出口条约不让下,所以就算了). 它目前还在公测阶段,可以免费获得. 正式版之后还是收费的,不过他宣称如果没有30倍速度提升,可以退款.
- 数据库的编程语言. 储存过程作为数据库内置的最强大编程语言, 当然也少不了并行执行这个杀手锏, 有些工具同时也被声称为ELT 工具, Extract/Load/Transform , 主要就是通过先批量装载数据然后利用数据库的储存过程和数据库本身的并行执行功能进行转换,其中最有名的大概就是oracle 的两款ELT 工具, oracle warehouse builder 和oracle data integrator. 通过利用oracle 强大的并行处理能力和pl/sql 的并行处理能力解决大数据量的转换工作, 通过parallel query , parallel dml/ddl ,parallel data loading和 pl/sql 中的pipelined table 函数, oracle 对付大量数据同样也是可以伸缩的.
如果你在linux shell下同一时间执行多个任务可以通过
nohup sqlplus system/manager exec xxx &
windows 的话大概就是 start 命令了.
虽然这不能算是真的数据库级别并行执行,不过也算一个小tip 了.
- ETL 工具本身的支持. ETL可视化工具中也不缺乏对并行执行的支持,像是业界大老informatica 和 datastage 都早已经是可以支持cluster 运行了, 而开源产品中Kettle 则是早已支持cluster 运行,其余ETL产品则不太清楚.
- http://www.dbms2.com/2008/08/26/three-approaches-to-parallelizing-data-transformation/
数据转换与并行处理
-
oracle 官方的pipelined pl/sql函数文档
-
http://www.akadia.com/services/ora_parallel_processing.html
oracle parallel processing
-
http://blog.chinaunix.net/u1/57759/showart_458451.html
oracle Pipelined表函数
分类: ETL