本手册面向的读者对象为具备数据集成业务知识及对ODI操作了解的开发人员,作为其完成基于ODI基础上KM二次开发的参考手册。详细介绍了如何在ODI上进行KM二次开发,以满足用户数据集成特定场合下的个性化需求。
KM(Knowledge Modules:知识模块)在ODI中是一组代码模板。在集成过程中,每一个KM对应一个特定任务,整个数据集成过程通过选择若干个KM代码模板生成执行代码而完成集成工作。
KM具有抽象性和可重用性,它是对集成过程规则和过程的描述,是对逻辑任务的抽象,而与具体的物理对象(如数据表、物理路径、列等)无关。在集成时,用户通过调用这些规则和过程,将接口、模型、包中存储的元数据信息(具体的数据库连接、映射关系等)作为参数注入到KM中,因此KM类似于一个抽象接口,与具体的业务对象分离开来,从而使得一个KM能够被多个集成项目可用。因此KM是对数据集成过程和规则的高度抽象和总结,通过开发一整套的KM库可以极大的降低数据集成的复杂度。
ODI平台为不同的集成场景和过程准备了多个KM,用户可以通过调用这些KM完成不同的集成需求;另外KM也允许用户自己扩展、重写,当已有KM模板无法满足集成需求时,可以通过自定义编写KM而完成特殊场景下的个性化需求。
ODI根据集成过程和功能的不同将KM分为以下几大类:RKM(Reverse KM)、CK(Check KM)、LKM(Load KM)、IKM(Integretion KM)、JKM(Journalizing KM)、SKM(Service KM),每一类KM完成特定类功能,如下表2-1所示:
KM类型
|
描述
|
使用场景
|
RKM
|
作反向工程,抽取元数据
|
在模型中使用,抽取元数据
|
CKM
|
检查数据是否满足约束
|
在模型中使用,为数据一致性
在接口中使用,为数据流程控制
|
LKM
|
加载异构数据到临时区域
|
在接口中使用,加载异构数据源
|
IKM
|
整合临时区域数据到目标
|
在接口中使用
|
JKM
|
创建变化数据捕获框架
|
在模型中使用,开启或者关闭日志
|
SKM
|
生成数据操作Web services
|
在模型中使用
|
表2-1:KM分类及功能
下面将分别详细介绍每一类KM:
RKM的主要职责是将模型数据反向至工作资料库中。RKM连接到数据源和应用系统中,从源中抽取模型、数据存储、字段等信息,将其数据经过清洗、转换后加载至SNP_REV_SUB_MODEL,SNP_REV_TABLE等表中,然后RKM通过调用OdiReverseSetMetaData API将这些信息更新到工作资料库。根据其反向数据源的不同,RKM又分为以下类型RKM Oracle、RKM DB2、 RKM File、RKM SQL(JYTHON)等。下图2-1为RKM工作流程:
图2-1:RKM工作流程
CKM主要用作数据记录一致性检查以及定义约束关系,主要用于两处:
n 检查静态数据一致性:此类CKM作用于模型,通过设立约束条件,可以清洗、过滤数据,只按需集成所需数据,例如通过添加CKM,只取年龄大于18的学生数据。
n 在加载过程中检查数据:此类CKM在接口中使用,做数据流程过程中的数据控制,通过将Designer中FLOW_CONTROL选项改为是,可以启用此CKM。
n 另外CKM会在临时区域创建前缀为E$的错误表存放非法数据。
其处理流程如下图2-2所示:
图2-2:CKM
图2-3:流数据控制
LKM主要用于将数据源上的数据信息读取至临时区域中、在Interface的设计中使用LKM,将源数据存储至临时区域的C$表中,其处理的主要工作有:
n LKM从远程的数据源抽取数据并加载到临时区域,在接口中使用;
n LKM在临时区域创建C$表,并把数据加载到C$表中;
n LKM执行一些简单的预转化工作,就像SQL语句中的SELECT语句。
另外,针对不同的数据源,分别对应不同的LKM,如:LKM SQL to SQL(JYTHON)、LKM SQL to SQL、LKM Oracle to Oracle(DBLINK)、LKM MSSQL to MASQL(BCP)等等,其处理流程如下图2-4所示:
图2-4:LKM工作流程
IKM的作用是将转换后的最终数据加载至目标中,IKM在使用前在确保所有数据都事先通过LKM加载到了临时区域,IKM直接从临时区域中获取数据。IKM根据临时区域位置的不同分为两种类型。第一种类型为临时区域在目标上的IKM,另一类为临时区域不在目标端上,其处理过程为
n 在接口中根据实际场景选择IKM类型
n 源是临时区域的C$表,经过转化生成结果集,结果集存放在I$表中,再由I$表合并到目标表当中
n 如果加入CKM,则合并过程中不符合规则的数据通过CKM放到E$表当中
其流程图2-5如下所示:
图2-5:临时区域在目标服务器
图 2-6:临时区域不在目标服务器
JKM的作用是捕获变化数据,主要用作在CDC(Change Data Capture)时对增量变化的数据做捕获,为增量集成做准备。JKM通过在数据源上建立触发器或通过日志位、标记位等方式将变化的数据加载至日记表中(J$),供集成到目标时所用。
n JKM在模型上使用,不能在接口中使用
n JKM自动设置并创建框架所需的参数、表、触发器、视图。
n JKM框架还包含ODI维护的CDC的元数据
其处理流程如下图2-7所示:
图2-7:JKM处理流程
SKM的作用是将数据操作部署为Web Service,发布到SOA架构中去。SKM作用于模型,不象其他KM,SKM并不产生可执行的代码,而仅产生部署描述文件,这些文件被编译然后部署到应用服务器的容器中,这样通过SKM,调用Web Service就可以访问到ODI发布的数据服务。
上一部分介绍了KM的基本内容、体系框架以及各个KM的功能、用途,这一部分将从实际入手介绍如何自定义开发一个KM以供集成所用,下面部分将从开发语言、开发平台、开发规则等部分进行详细介绍。
在开发语言规则上,KM支持Jython、标准SQL以及ODI的Substitution Method,可以通过对这几种脚本语言或开发语言进行组合、拼装来编写KM;
不同的知识模块,不同的步骤,显示的可能不太一样,有些是SQL语句,有些则是JAVA语言(Jython脚本),然后还会出现一些类似odiRef.getInfo()的函数,关于这些宏变量和函数的具体含义可以从ODI的参考文档里找到。每一个知识模块的步骤既可以删除,也可以增加,所以可以非常容易地实现 ODI的扩展。通过在一个原有的知识模块上修改形成新的知识模块是最容易的定制方式,另一种方式是完全可以通过Jython这种语言来写知识模块,则是一种更加灵活和复杂的知识模块的定制方式。
Jython语言是KM编写的脚本语言,在ODI中可以用Jython来编写KM,也可以把Jython代码混合在SQL、PL/SQL、OS中。正是由于Jython语言,使得ODI在可编程性上得到极显著的提高,可以通过Jython执行复杂的操作(如操作字符串、List、访问FTP、管理文件、调用外部JAVA类等)。
Jython是Python编程语言100%纯Java实现,它结合了Python和Java虚拟机和库的优点,成为了Java平台的有益补充。
最初的Jython又称为JPython,是一个十足的Java应用程序,它允许使用Python编程语言的语法和大多数特性。和其它编程语言比较,Jython有如下几个优点:
n Python解释器shell的Jython版本可以对某些想法和API作便利的实验和研究。而不必经历一般的Java编译运行周期。
n Python被设计成动态且通用的,因此你不必通过使用复杂的库(如用于Java反射和内省的库)来添加这些特性。这使开发更简单,而且它在自动测试框架中特别有用。
n 部署简捷,提供了及时部署能力,无需花大量时间在打包和编译周期上。
n 易于学习和使用,技术门槛低,可以轻松地找到大量的使用者。
KM中包含有大量的substitution API方法,通过调用类似getTable()、getObjectName()等这样的替换方法而不直接将物理表名、模式名、catalog硬编码到KM中,提高了KM的可重用性,防止了硬编码问题。另外,通过直接调用ODI提供的这些substitution API也降低了代码开发的难度,能够直接调用到相关元数据信息。因此在KM的编写中,substitution API的合理使用和调用显得尤为重要,合理的使用substitution API将降低KM的开发难度、保证KM质量。
Substitution API中的方法均为java编写,返回值为字符串,整个KM中通过调用这些substitution Method获取在主工作库和工作资料库里的元数据信息。如下表为一段substitution API运行示例,通过调用API中的方法,编译运行后就得到了具体的程序代码。
|
代码
|
KM中代码
(编译前)
|
Create table <%=odiRef.getTable("L", "INT_NAME", "A")%>
(
<%=odiRef.getColList("", "\t[COL_NAME] [DEST_CRE_DT]", ",\n", "", "")%>
)
|
经ODI
编译后
|
Create table db_staging.I$_PRODUCT
(
PRODUCT_ID numeric(10),
PRODUCT_NAME varchar(250),
FAMILY_ID numeric(4),
SKU varchar(13),
LAST_DATE timestamp
)
|
关于在KM中调用Substitution的详细语法规则将在下一节中详细讲述。
在ODI中,大部分的数据集成的工作是通过SQL语句来完成的,例如源数据到临时区域、临时区域数据到目标等操作,因此在KM中有大量的SQL操作对数据做Insert、Update、Delete操作。仔细阅读KM就会发现大部分的KM步皱代码都是在SQL语句中嵌入Substitution Method,或用Jython语言做流程控制等;在Operator里查看也会发现,编译后的KM大多是规范的SQL语句,因此在KM编写、开发的过程中,SQL的编写也是很重要的一个步骤。
例如,以下是LKM SQL TO SQL 中Load Data步骤,里面就是在SQL语句的整体框架下通过嵌入Substitution Method方法完成的:
insert into <%=snpRef.getTable("L", "COLL_NAME", "A")%>
(
<%=snpRef.getColList("", "[CX_COL_NAME]", ",\n\t", "","")%>
)
values
(
<%=snpRef.getColList("", ":[CX_COL_NAME]", ",\n\t", "","")%>
)
ODI中可以运行、编译Jython脚本,如LKM SQL TO SQL(Jython)就是通过Jython脚本调JDBC完成源数据读取的,另外其他很多KM也是通过Jython来编写;另外利用Jython可以引用外部开发好的JAR包,这样除了ODI自带的Substitution API外,其可利用API的范围将极大扩展,任何JAVA写的API通过Jython都能够被引用,因此在KM中加入Jython这样一门程序语言,将使KM更具灵活性,增强其可扩展性。学会在KM中编写Jython脚本就显得尤为重要,下面将简要介绍Jython的开发规则,关于Jython的详细语法可以参考ODI提供的《Jython Quick Reference》或其他Jython方面介绍的书籍。
在KM中使用Jython有以下需要注意的一些地方
n Code execution:Jython的语句是按顺序执行的,同时也支持if, for,while,raise控制结构
n Block:Jython以行作为其块区域,一个Block以相同的行对齐或空格符标识
n 注释:Jython的注释以字符#开头,以此行物理行的末尾为结束标识
n 关键词:以下这些标识符为Jython默认保留的关键词,不允许变量去声明
and del for is raise assert elif from lambda return break
else global not try class except if or while continu exec
import pass def finally in print
n 数据类型:Jython的数据类型支持Number(Decimal integer,octal integer,Hex integer,Long integer,Float,Complex numbers)、String、Lists、Dictionaries、Tuples、Sequence、Files等。
n 外部类加载:在KM中用Jython加载外部类,使用import命令,另外外部的类文件需要在classpath路径下。
3.2.2 KM中Substitution API调用规则
Oracle Data Integretor中提供了大量已开发好的Substitution API,在开发中会经常直接调用这些API方法以获取存储在资料库中的元数据信息,Substitution API能够在KM中的任意位置调用,在<% %>符号内引用,其返回值是一个字符串,具体开发调用规则如下表3-1所示:
选项
|
说明
|
调用位置
|
Substitution API能够在KM中的任何位置插入
|
调用方式
|
调用时以<% %>括起,Substitution API的方法写在括号内
|
调用语法
|
目前ODI 10.1.3.2.0版本中的Substitution API方法以snpRef开头调用,要调用getForm()这样的Substitution Method时,只需编写odiRef.getForm()即可。
|
调用时间
|
Oracle Data Integretor的API集成自snpReference类,snpRef的实例类能够在ODI平台运行时的任何时间获得
|
API方法
|
Substitution API中的方法种类繁多,全局方法、日志方法、加载方法、检查方法、整合方法、反向工程方法、Web服务方法、动作方法等,对这些具体方法的调用参考ODI提供的《Substitution Methods Reference》,对每一个方法的用途和参数均有详细说明。
|
表3-1:开发规则表
其常用语法具体如下:
【Free Text】 【<% Java Expression %>】
Free Text:代码块中的任意位置
Java Expression:构建字符串的Java表达式。
Java表达式举例:snpRef.getTableName(”WORK_TABLE”) + “FUTURE”
CKM的特别语法:
下面的语法用在IKM中,调用检查过程(CKM)
<% @include CKM_FLOW/CKM_STATIC DELETE_ERRORS %>
CKM_FLOW:根据接口->控制中选择CKM,触发流控制。
CKM_STATIC:触发目标数据存储中的静态控制。检查数据存储中的常量或者静态常量。
DELETE_ERRORS:自动删除检测到的错误。
动作中使用置换方法:
<% odiRef.method_name(); %>
例如:<% odiRef.dropRefferingFKs(); %>
PS:不要使用”=”,并且以分号结束。
动作一般是:add、drop、enable、disable、modify。
在KM的修改、开发中,遵循以下相关指南、规则,将使开发过程变得更为轻松、灵活,以下是我们归纳总结的一些经验、指南:
n 不要从无到有开发你的KM,这样的话成本代价太大。ODI已经提供了100多种KM,因此建议在编写KM之前先了解一下已有的KM,手中的KM样例越多,开发起来速度越快。例如,可以复制利用已有的一些代码对它进行改进、增强,或者将相似的代码部分拷贝、移植到新开发的KM中,实现重用。
n 在KM中尽量少使用硬编码的方式,物理表名、模式名、catalog尽量少以硬编码的方式写入到KM中;而应该多使用诸如getTable(),getObjectName()这样的API方法,以增强KM的通用性。
n 在KM中多使用SQL语句,而不要全部都用Java或Jython语言,因为SQL语句更易于阅读和维护。
n 另外,对于新开发的KM,也要以编于理解的名字命名。
对于KM的开发,可以直接在ODI平台上进行,其具体步骤如下所示:
1、 在ODI中点击进入Designer→项目→知识模块
2、 选定需要编辑的KM、及KM的哪个步骤,如下图编辑的是LKM File to DB2 UDB(load),则双击进入即可。
3、 选中所需要编辑的KM步骤,点击详细步骤→具体的某个步骤,即可进行KM的编辑了,另外也可以新增或删除步骤。
4、 双击具体的某个步骤,即进入代码界面,进行KM的编写。
5、 对于编写好的KM,只能通过接口调用后运行,在Operator中查看代码执行情况,检查其正确与否。
如果是直接在Designer里面编写KM,然后供接口调用、从Operator里查看执行结果,这种方式开发效率低下、对代码错误无法判断。因此需要选取一个开发平台,能够直接在平台上对KM进行开发、编译、调试。
开源插件JyDT支持在Eclipse平台下开发、调试、编译Jython代码,在Eclipse平台下开发KM,然后移植到ODI中,将极大的提高开发效率,但是以这种方式开发KM也要注意以下几个问题:
n Eclipse JyDT仅支持Jython开发,对于混合了Subsititution API的KM来说,Eclipse直接调用不了这些存储在资料库里的信息
n 对于上述情况可以采用一种变通的方法,即先在接口中运行KM,在Operator中得到KM编译过的代码后,再将代码移植到Eclipse中做修改,这样Subsititution API中的方法已经经过编译,转换成了实际的物理配置信息
n 对于由大量SQL语句组装成的KM,Eclipse无法编辑
由此可见Eclipse开发平台适用于那些由Jython直接编写的KM,因此对KM的开发可以由两个平台结合起来,按实际情况选用以提高开发效率。
== 文档结束 ==
本文转自:http://dangdj.spaces.live.com/blog/cns!EDE097CEA39ABC75!186.entry
相关推荐
麦芽糊精检验表格(食品企业原辅料质量验收记录表).docx
塑料原型制作服务市场报告:全球前13强生产商排名及市场份额.docx
C++数据结构与STL容器总结
谷氨酸钠(味精)检验表格(食品企业原辅料质量验收记录表).docx
已更新微信登录获取用户头像失败功能,增加登录更新账号信息功能。 主要功能 会员系统,用户登录/注册 购买记录 收藏记录 基本设置 后台控制 导航颜色 字体颜色 标题等设置 流量主广告开关 小程序广告显示隐藏 广告主审核过审核 资源管理 后台可以添加5种类型资源 灵活设置 激励广告解锁资源 vip专享资源 免费资源 积分购买资源 阅读全文资源 公告 会员公告系统 VIP系统 用户可以开通VIP 查看vip专属资源 签到 签到互动二奖励 分类 资源分类 友情连接 跳转小程序 盈利能力:激励视频广告+插屏广告+视频广告+横幅广告+格子广告 =收益神器
[继电保护仿真]--三段式距离保护 基于matlab simulink仿真 支持三段式电流保护、三段式距离保护、零序电流保护、欠压保护、振荡闭锁、差动保护、变压器差动保护、变压器后备保护、母线保护、自动重合闸、分布式电源自适应保护等仿真定制 ,继电保护仿真; 三段式距离保护; MATLAB Simulink仿真; 多种保护类型仿真定制,Matlab Simulink三段式距离保护仿真定制
内含数据库 源码 流程图 效果图,绝对物超所值
内容概要:本文主要讨论了将弹性薄板动力分析从传统的Lagrange体系转换到Hamilton体系的必要性和优势。通过引入非传统Hamilton变分原理,建立了薄板动力学在相空间中的正则方程及对应的辛算法——辛空间有限元-时间子域法。这种方法不仅可以提高计算精度与效率,而且克服了以往非辛算法中存在的诸多缺陷。此外,文章提供了具体的数学模型、边界和初始条件推导以及算例验证。 适用人群:适用于固体力学领域研究人员、机械工程专业的学生和技术人员,特别是关注弹性薄板振动特性分析的专业人士。 使用场景及目标:本方法适用于弹性薄板结构在不同边界条件下的动态响应分析。旨在为相关工程问题提供更高精确度的解决方案。 其他说明:该研究展示了新型算法相比于传统方法在稳定性和准确性方面的优越性。通过对两个特定实例的数据对比进一步证实了辛算法的有效性和可行性。
内容概要:本文提出了一种基于时变参数字典和细化二次选择机制的正交匹配追踪(TPRSS-OMP)算法,用于滚动轴承的早期故障检测。传统的相关滤波方法对噪声敏感,固定参数原子难以适应时间变化的影响特征,而本文提出的改进方法克服了这些问题。首先通过分段时域相关滤波与K-means聚类确定拉普拉斯小波字典的时间变化参数范围,在求解稀疏系数过程中引入新的优化后的次级选择原则——考虑信号重建前后信封频谱峰度的变化,从而提高算法对背景噪音干扰下的故障冲击特征提取能力。实验结果表明,新算法能有效重构故障信号并精准提取故障脉冲特征,适用于实际工况下的滚动轴承监测任务。 适合人群:具有一定机械工程与振动信号处理基础知识的研究人员、研究生、工程师。 使用场景及目标:①工业设备中滚动轴承及其他旋转设备的早期故障预警系统构建;②从强背景噪声中精确提取故障冲击特征。 其他说明:论文提供仿真及真实数据验证,展示了改进后的正交匹配追踪方法相比现有技术在准确性方面的优越表现,特别强调对于复杂操作环境下的鲁棒性能提升。文中还讨论了未来需要解决的问题如K-means聚类方法可能受到大幅波动的影响以及复合故障情况下的扩展性研
醪糟检验表格(食品企业原辅料质量验收记录表).docx
SBLC买断基本信息.docx
罗汉果检验表格(食品香辛料质量验收记录表)检验表格(食品香辛料质量验收记录表).docx
100%能恢复数据,亲测亲调试优化了代码 工具概述 我们有一个用Go语言编写的工具,能够读取.ibd文件并将其转换为可执行的SQL语句,从而实现数据恢复。该工具的主要功 解析.ibd文件:读取并解析.ibd文件中的数据结构。 生成SQL脚本:将解析到的数据转换为SQL插入语句。 恢复数据:通过执行生成的SQL脚本,将数据重新导入数据库 https://blog.csdn.net/qq_24396737/article/details/146182892?spm=1001.2014.3001.5501
内容概要:本国际标准 (ISO 13733:2020) 详细规定了安装在船舶上以引导系泊绳从船内到外板的带有顶部滚轮的船用通用导缆器的标准和技术要求。具体涵盖四种类型的导缆器分类、额定尺寸、尺寸参数、制造材料、结构设计、制造与检测要求以及标记要求等内容,并明确了安全工作载荷(SWL)的定义和要求,还提供了有限元法(FEM)用于评估强度的分析条件。 适用人群:适用于从事船舶工程、海上技术设备制造和相关标准规范实施的专业技术人员和监管人员。 使用场景及目标:本标准用于指导船舶装备制造商和工程师进行正确的导缆器设计、选型、生产及其安装施工,并保障在各种实际操作条件下能可靠传递系泊负荷。 其他说明:标准修订了多项内容,增加了技术指南并调整了关键部件的设计尺寸,提高了产品的安全性。此外,对于涉及专利权的技术细节,请参照ISO官网的相关信息获取进一步帮助。
本文为抛砖引玉:简单描述,如需根据自身业务详细设计,请随时联系
基于51单片机的测量仪(电压,电平,频率) 1104-基于51单片机的测量仪(电压,电平,频率)原理图、流程图、物料清单、仿真图、源代码 功能介绍: 基于单片机的简易测量仪(测量电压、TTL电平01,频率等) 设计一个简易的测量设备,用两支表笔(1个是GND,一个是输入信号)测可用于数字电路实验及测试中 功能要求如下: (1)测量直流信号的电压,电压范围0~5V; (2)测量信号的TTL电平,给出高低电平测量结果;(3)测量数字信号的频率,给出测量结果; (4)用LCD显示结果,使用按键切测量功能(5)显示学号及姓名的拼音字母 有哪些资料: 1、仿真工程文件 2、源代码工程文件 3、原理图工程文件 4、流程图 5、功能介绍 6、元件清单 ,基于51单片机的测量仪;电压测量;电平测量;频率测量;原理图;流程图;物料清单;仿真图;LCD显示;按键切换功能;学号姓名显示。,基于51单片机多功能测量仪:电压、电平、频率测量及显示系统
基于YOLOv9的智慧渔业捕捞检测系统(Python源码+数据集) 智慧渔业捕捞一共355张,类别为:'fish' ,基于YOLOv9; 智慧渔业捕捞检测系统; Python源码; 数据集; 鱼('fish'); 355张图片,基于YOLOv9的渔业智慧检测系统(Python+数据集)
O型環槽部設計.zip
超1000项!2024年度国家自然科学基金管理学部立项清单(最全整理)-最新出炉 一共有1000多个记录,主要统计自各校相关院系发布的2024年获批结果和各位项目负责人的CV,统计项包括学科代码(仅作参考)、项目批准号、单位、负责人、项目名称、项目类型。。内容来源于网络分享,如有侵权请联系我删除。