网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > 体系架构 > 使用Oracle内建功能构建ETL流程-体系架构  

使用Oracle内建功能构建ETL流程-体系架构

2007-04-20  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

   经常听到客户抱怨一些企业级的数据仓库软件许可证过于昂贵;也曾经见到过一次性的Access到 Oracle的数据迁移就使用了DataStage(这是真的!在发现 Server版本不能连接Access后,还专门购买了DataStage for ODBC --__--!)。实际上一些简单的ETL流程完全可以使用Oracle内建的功能完成。本文的主旨在于说明这一思想,文中代码未必是最佳实践。本文中所有的代码经过了测试,但一些错误与疏忽还是难免的。如果你发现了错误,或者有不同的观点,欢迎讨论。

    概述
    假如把一个完整的数据仓库系统比作一个提供美味菜肴的餐馆,那么ETL系统就是这个餐馆的厨房。在大多数情况下,ETL对最终用户来说是透明的,正像食客往往不需要进入厨房获取服务,厨房也不会对食客开放。但是,ETL模块常常占用整个数据仓库项目70%以上的资源,实际情况也大概也是如此,厨师的工资比侍者要高出很多。

    在当前的数据仓库项目中,企业级ETL工具昂贵的许可证、培训费用常常使许多中小型用户望而却步。真实世界的应用中相当一部分的数据源(E) 都是以文件或数据库的方式提供,进行的转换 (T) 也可以在数据库之内完成,基于这一实际情况,利用Oracle自身的一些功能,我们可以构建相对简单的ETL流程。
网管u家bitscn.net


    在Oracle9i中引入了外部表(External Table)的概念,通过访问驱动程序ORACLE_LOADER可以对数据库之外的文件进行只读的SQL查询。在Oracle10g中,提供了第二个访问驱动程序ORACLE_DATAPUMP,允许用户对外部表进行写操作,写出的结果文件以特定的结构保存并允许DPAPI访问,即该结果文件可以被加载到另一个数据库中。同时,新的访问驱动程序也支持列对象的投影。

    配合10g中新增的DBMS_SCHEDULER包,可以很方便地实现ETL工具的定时调度功能。这个新的DBMS_SCHEDULER包取代了原有的DBMS_JOB包,并提供了更加强大完善的功能,笔者在本文中仅举一简单示例说明。 

网管联盟bitsCN_com

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

中国网管联盟bitsCN.com

网管bitscn_com

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

SQL> CREATE OR REPLACE DIRECTORY source_dir as 'C:\oracle\oradata\source';
--源文件目录 Directory created. SQL> grant connect, dba to stenny identified by stenny; Grant succeeded. SQL> CREATE OR REPLACE DIRECTORY source_dir as 'C:\oracle\oradata\source'; Directory created. SQL> CREATE OR REPLACE DIRECTORY target_dir as 'C:\oracle\oradata\target'; Directory created. SQL> CREATE OR REPLACE DIRECTORY log_dir as 'C:\oracle\oradata\log'; 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.
网管论坛bbs_bitsCN_com

  网管联盟bitsCN_com

中国网管论坛bbs.bitsCN.com

TAGs   流程   体系   架构   构建   功能   使用       数据   文件   SQL>      
 上一篇:提防网络隐患 保护Oracle数据   下一篇:Oracle体系结构:内存结构和进程结构-体系架构
使用Oracle内建功能构建ETL流程-体系架构 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: