OracleODI系列.doc_第1页
OracleODI系列.doc_第2页
OracleODI系列.doc_第3页
OracleODI系列.doc_第4页
OracleODI系列.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle ODI系列产品组成: Oracle Data Integrator Agent Oracle Data Integrator Designer Oracle Data Integrator Operator Oracle Data Integrator Security Manager Oracle Data Integrator Topology Manager Oracle Data Integrator Metadata Navigator Oracle Data Integrator Lightweight Designer Oracle Data Integrator Driver for XML Oracle Data Integrator Driver for LDAP Oracle Data Integrator Knowledge Modules ODI简介ODI(Oracle Data Integrator)前身是Sunopsis Active Integration Platform,在2006年底被Oracle收购,重新命名为Oracle Data Integrator。主要定位于在ETL和数据集成的场景里使用。ODI和Oracle原来的ETL工具OWB相比有一些显著的特点,比如和OWB一样是ELT架构,但是比OWB支持更多的异构的数据源等等,本系列文章将逐步介绍ODI的一些基本概念。什么是ODI的知识模块个人觉得Oracle的Data Integrator里最好最有特点的特征是提出了知识模块的概念(Knowledge Module)。ETL的发展总是从手工编程开始,然后逐渐出现专门的ETL工具,其实我们在项目里所能够遇到的一些场景(如把文件载到数据库,从Mysql数据库抓取数据放到Oracle数据库里,从DB2把数据抓取出来放在Oracle数据库里等)撇开这些数据抽取和转换工作的业务部分,其实总是可以总结为file-OracleMysql-OracleDB2-OracleOracle-DB2。如果撇开具体的项目不谈,这些都是一些被反复使用的场景,ODI提出了知识模块的概念,把这些场景的详细的实现步骤作为一个一个的知识模块并使用Jython脚本语言结合数据库的SQL语句录制成一步一步的步骤忠实地记录下来,这样就形成了ODI里的100多个知识模块,基本上包含了所有普通应用所涉及到的所有场景。更方便的是,用户既可以直接使用ODI的知识模块完成数据的获取工作,也可以直接在知识模块上面做各种定制,比如某一个业务场景可能并不需要知识模块里的某一个特定的步骤,那就可以直接把该步骤删除掉从而提供更好的性能。当然用户也可以完全自己来开发这些知识模块。ODI知识模块(Knowledge Module)的分类ODI的知识模块主要分为几个大类(RKM,CKM,LKM,IKM,SKM),其中最重要的是LKM(load KM)和IKM(Integration KM)RKM:RKM完成从源系统和目标系统的数据结构的反向工程来形成数据模型的功能。CKM:CKM完成数据质量检查。LKM:LKM完成从源数据库数据加载到临时表。IKM:IKM完成从临时表的数据加载到目标表。SKM:SKM完成ODI和WEB服务接口的功能。SKM(Service KM):Web服务知识模块,可以使用该知识模块来生成Web服务调用ODI认为一个数据的流动包含从源表到临时表,然后从临时表到目标表的过程,而临时表可以放在源上,或者放在目标数据库上,可以自己选择。(当然,通过自己来改动KM也完全可以对这个概念做改动,甚至可以使用一个KM完成所有的工作)。如下图(临时表放在目标数据库上,然后数据的转换在目标数据库上完成):如何定制知识模块这里我们通过分析一个具体的知识模块来看看知识模块的概念。一个项目需要先把项目里用到的知识模块导入进来:双击相应知识模块,就会出现知识模块里的具体步骤:如下图上面显示了一个使用Oracle的dblink技术来完成从一个Oracle数据库里把数据导入临时区的LKM的详细步骤,双击一个步骤则会显示这个步骤完成的具体的命令:上图窗口下方就是完成这个步骤的具体命令,不同的知识模块,不同的步骤,显示的可能不太一样,有些像是SQL语句,有些则象JAVA语言(Jython脚本),然后还会出现一些类似snpRef.getInfo()的函数,关于这些宏变量和函数的具体含义可以从ODI的参考文档里找到,上图的这个步骤最终生成的其实是一个创建dblink的sql命令。每一个知识模块的步骤既可以删除,也可以增加,所以可以非常容易地实现ODI的扩展。通过在一个原有的知识模块上修改形成新的知识模块是最容易的定制方式,另一种方式是完全可以通过Jython这种语言来写知识模块,则是一种更加灵活和复杂的知识模块的定制方式。 ODI功能扩展ODI(Oracle Data Integrator)除了本身提供各种丰富的功能外,还提供了使用Jython语言进行功能扩展的框架,ODI的设计环境自身带了一个Jython解释器,能够解释运行Jython语言。本文介绍在ODI环境里如何使用Jython语言来扩展ODI的功能。Jython语言简介Jython语言又称为Java版本的Python语言,以Java语法的方式来提供类似Python语言的功能,这类的脚本语言以非常丰富的类库来提供一些常见功能的简单使用方式,比如FTP功能,打开文件,写文件,socket通讯等功能。而且因为使用Java语言,所以使用JDBC操作数据库的方式完全和java语言一致,给ODI环境提供了几乎无限的扩展能力。本文不打算仔细介绍Jython语言,只是通过下面一个例子来让大家对它有一个直观的了解。import java.sql as jsqlimport java.lang as langimport os as josdriver, url, user, passwd = (oracle.jdbc.driver.OracleDriver,jdbc:oracle:thin:localhost:1521:xe,scott,tiger)lang.Class.forName(driver)c = jsql.DriverManager.getConnection(url,user,passwd)s = c.createStatement()sql_stmt = select * from user_tablesprint executing , sql_stmtrs = s.executeQuery(sql_stmt)f=open(c:/my.txt,w)while (rs.next():f.write(rs.getString(TABLE_NAME) )c.close()f.close()上面是一个完整的Jython脚本的例子,熟悉java语言的读者对上面这个例子应该很容易了解,就是先打开一个Oracle数据库的JDBC连接,然后把该用户下的所有表的名称列表的结果写到一个文件里。如果大家打算运行这个例子,有一个需要注意的地方是标明为红色的那个语句必须通过一个tab键让它看起来比while语言要更靠右一些,因为Jython语言是通过tab缩进的方式来标记一个循环体的(而java语言则是通过的方式来标记循环体,这是他们不一样的地方)。如何在ODI里使用Jython语言ODI里运行Jython脚本的方式主要有三种:1. 第一种方式是调试Jython脚本的方式,可以以Jython语言的标准使用方式来运行,这可以到ODI按照目录的bin目录下,执行jython.bat,则这个时候就处于标准的Jython环境,如下图在上面的窗口里就可以输入执行Jython语言命令,使用这种方式来调试Jython脚本是一个很好的方法。也可以使用上述命令来运行一个脚本,假设脚本名称为testjython.py,则运行该脚本的命令为jython.bat testjython.py2. 第二种方式是直接把调试完成的Jython脚本输入到ODI的图形设计环境里,主要是通过在ODI里建立一个过程来使用Jython脚本。这种方式是标准的在ODI里调用Jython脚本的方式。这种方式需要在项目里的过程文件夹通过新建一个过程来写Jython脚本,如下图:首先需要通过在过程里增加一个命令,如下图双击该命令则可以编辑该命令的具体需要执行的脚本:如下图 在上图的命令窗口就可以编辑和输入Jython脚本,有一个需要注意的地方是在技术列表框里必须选择Jython。3. 第三种方式是在ODI运行的时候,当设计完成之后,因为ODI是通过agent来从资料库里获得需要调度和执行的代码,所以每一个agent都被设计能够解释和执行Jython语言。这种方式是ODI运行时Jython的执行方式。 ODI里使用Jython能够完成的一些常见任务Jython语言是一种扩展性非常强的语言,丰富的类库给Jython语言提供了几乎能够完成任何任务的能力。下面列出了一些ODI Jython类库里的一部分让大家对于Jython能够完成的任务有一个大概的了解:具体的详细列表请到网站获得。类库用途概述os和和操作系统交互,包括目录,文件操作等socket和TCP/IP通讯交互urllib/urllib2和http,ftp,gophfer交互poplib支持POP,IMAP,SMTPtelnetlib支持telnet等。简介Oracle的OWB(Warehouse Builder)和ODI(Data Integrator)都是使用E-LT的理念设计出来的数据抽取/数据转换工具,他们本身都可以作为一个ETL工具使用但是也有不同的特点,本文主要讨论他们之间的差异和关系。ODI和OWBODI和OWB是互为补充的,ODI有四个地方是对OWB的很好的补充:1. 对于需要异构数据支持:当数据源或者目的不是Oracle数据库,ODI能够生成针对那个数据源的native的SQL操纵语句。2. 对于需要实时数据集成的环境:ODI能够检测事件,一个事件可以触发ODI的一个接口流程。从而完成近实时的数据集成。下图是ODI提供的一些检测事件的工具,可以用在package里(ODI workflow的代名词)如OdiFileWait是等待文件到达,OdiSleep类似于许多系统里的Sleep等待轮询,OdiWaitForLogData则可以用于捕获增量数据的捕获的事件。这里的组件都是实现实时数据集成的关键部分。3. 在数据抽取集成过程中需要和SOA集成,ODI本身提供了call web service的机制,并且ODI的接口也可以暴露为webService,从而可以和SOA环境进行交互。4. 一致的CDC(Change Data Capture)支持,不同的数据源(Oracle,DB2等)对于变化数据获取都提供了不一样的技术框架,ODI把这些不同的技术框架屏蔽了,以一个统一的接口方式提供统一的CDC的设置框架,并提供订阅者的功能。而OWB相比于ODI也有自己的很多特点:1. 丰富的Oracle数据运算符,能够提供Oracle数据库之间的高速转换抽取。2. 从11g开始,OWB会作为Oracle的标准选件来提供,OWB本身会通过Oracle数据库的安装盘来安装,和所有的其他Oracle选项一样,都会和数据库核心紧密集成。3. 数据质量管理:OWB的data profiling是一个相当强的数据质量管理工具,原理和流程是 数据采样-分析采用数据的错误和规则-生成纠正采样数据的mapping流程-验证流程-把流程应用到所有的数据上的循环。小结OWB本身除了运行需要较多的资源之外,本身是一个设计得相当好的工具(身边一些用过的人都评价还是很不错呀!),对于Oracle数据之间的抽取转换的功能完全不是任何别的工具可以比的,当然OWB的主要不足都体

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论