使用Oracle内建功能构建ETL流程(一)

经常听到客户抱怨一些企业级的数据仓库软件许可证过于昂贵;也曾经见到过一次性的Access到 Oracle的数据迁移就使用了DataStage(这是真的!在发现 Server版本不能连接Access后,还专门购买了DataStage for ODBC --__--!)。实际上一些简单的ETL流程完全可以使用Oracle内建的功能完成。本文的主旨在于说明这一思想,文中代码未必是最佳实践。本文中所有的代码经过了测试,但一些错误与疏忽还是难免的。如果你发现了错误,或者有不同的观点,欢迎讨论。
    概述
    假如把一个完整的数据仓库系统比作一个提供美味菜肴的餐馆,那么ETL系统就是这个餐馆的厨房。在大多数情况下,ETL对最终用户来说是透明的,正像食客往往不需要进入厨房获取服务,厨房也不会对食客开放。但是,ETL模块常常占用整个数据仓库项目70%以上的资源,实际情况也大概也是如此,厨师的工资比侍者要高出很多。
    在当前的数据仓库项目中,企业级ETL工具昂贵的许可证、培训费用常常使许多中小型用户望而却步。真实世界的应用中相当一部分的数据源(E) 都是以文件或数据库的方式提供,进行的转换 (T) 也可以在数据库之内完成,基于这一实际情况,利用Oracle自身的一些功能,我们可以构建相对简单的ETL流程。
    在Oracle9i中引入了外部表(External Table)的概念,通过访问驱动程序ORACLE_LOADER可以对数据库之外的文件进行只读的SQL查询。在Oracle10g中,提供了第二个访问驱动程序ORACLE_DATAPUMP,允许用户对外部表进行写操作,写出的结果文件以特定的结构保存并允许DPAPI访问,即该结果文件可以被加载到另一个数据库中。同时,新的访问驱动程序也支持列对象的投影。
    配合10g中新增的DBMS_SCHEDULER包,可以很方便地实现ETL工具的定时调度功能。这个新的DBMS_SCHEDULER包取代了原有的DBMS_JOB包,并提供了更加强大完善的功能,笔者在本文中仅举一简单示例说明。  
 


    Ralph Kimball在他的The Data Warehouse ETL Toolkit中提出了ECCD(Extract-Clean-Conform-Deliver)的架构,在此文章中笔者将使用ECCD的四个步骤进行描述:源系统通过FTP提供文件格式的数据源文件,使用ORACLE_LOADER访问驱动程序使用该文件构建外部表(抽取),与数据库中的标准数据表进行校验并写入对应的Staging表(清洗与整合),处理的结果通过ORACLE_DATAPUMP访问驱动程序写入目标文件(分发)。
  


   准备工作
    在使用外部表之前,首先要建立DIRECTORY对象。同时给需要进行外部表操作的用户赋予适当的权限。

SQL> create OR REPLACE DIRECTORY source_dir as ’C:oracleoradatasource’;  
--源文件目录 Directory created. SQL> grant connect, dba to stenny identified by stenny;  
Grant succeeded. SQL> create OR REPLACE DIRECTORY source_dir as ’C:oracleoradatasource’;  
Directory created. SQL> create OR REPLACE DIRECTORY target_dir as ’C:oracleoradatatarget’;  
Directory created. SQL> create OR REPLACE DIRECTORY log_dir as ’C:oracleoradatalog’;  
Directory created. SQL> grant read on directory source_dir to stenny;  
Grant succeeded. SQL> grant write on directory target_dir to stenny;  
Grant succeeded. SQL> grant write on directory log_dir to stenny;  
Grant succeeded.
参与5

0同行回答

“答”则兼济天下,请您为题主分忧!
sunyuzhousunyuzhou软件开发工程师文思创新
其实使用oracle的jobs机制,也能在一定程度上完成并行的显示全部
其实使用oracle的jobs机制,也能在一定程度上完成并行的收起
互联网服务 · 2011-04-22
浏览1514
specialcospecialco软件开发工程师SANDIE
ETL企业级的工具主要是面向复杂,大型的企业,小中型企业完全没有必要使用。比个简单的例子:datastage的job并行机制,就是oracle很难实现的功能。显示全部
ETL企业级的工具主要是面向复杂,大型的企业,小中型企业完全没有必要使用。

比个简单的例子:datastage的job并行机制,就是oracle很难实现的功能。收起
互联网服务 · 2011-04-21
浏览1551
chocolatebeanchocolatebean工程师巧克力
学习学习显示全部
学习学习收起
金融其它 · 2011-04-21
浏览1478
hong257hong257BI开发工程师yunlifang
有道理,有时候不能太依赖于ETL工具显示全部
有道理,有时候不能太依赖于ETL工具收起
轨道交通 · 2011-04-20
浏览1528

提问者

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2011-04-07
  • 关注会员:1 人
  • 问题浏览:4368
  • 最近回答:2011-04-22
  • X社区推广