IKM开发.docx

上传人:b****7 文档编号:9320323 上传时间:2023-02-04 格式:DOCX 页数:35 大小:587.17KB
下载 相关 举报
IKM开发.docx_第1页
第1页 / 共35页
IKM开发.docx_第2页
第2页 / 共35页
IKM开发.docx_第3页
第3页 / 共35页
IKM开发.docx_第4页
第4页 / 共35页
IKM开发.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

IKM开发.docx

《IKM开发.docx》由会员分享,可在线阅读,更多相关《IKM开发.docx(35页珍藏版)》请在冰豆网上搜索。

IKM开发.docx

IKM开发

架构师:

数据 

   下载

 OracleDataIntegrator 

 OracleDatabase11g 

 示例代码

 

   标签

dataintegration, soa, 全部

 

在OracleDataIntegrator中开发知识模块

了解如何在数据集成设计中构建您自己的集成知识模块以快速投入生产。

作者:

UliBethke

2009年6月发布

OracleDataIntegrator中的知识模块 (KM)是在不同技术间实施可重用转换和ELT(提取、加载和转换)策略的组件。

例如,通过从OracleDatabase10g 中的更改数据捕获提取数据,而后将转换的数据加载到OracleDatabase11g 中已分区的事实表中,或者从MicrosoftSQLServer数据库创建基于时间戳的提取,而后将该数据加载到Teradata企业数据仓库中。

KM的强大在于其可重用性和灵活性—例如,您可以针对某个事实表开发和实施加载策略,然后只需点击鼠标,即可将此加载策略应用到所有的事实表。

如果您调整ELT策略以适应不断变化的业务要求并修改相关KM,则所有使用该KM的接口都将继承该更改。

您可以混合搭配不同的编程语言、类型和样式(原生RDBMSSQL、脚本编写语言,如Jython或JavaScript,甚至是Java)。

这使得这些KM变得极为灵活。

这种创新方法称为OracleDataIntegrator声明式设计,可比传统的ELT方法快10倍。

OracleDataIntegrator附带了各种预定义的KM。

您可以直接在ELT接口(等同于OracleWarehouseBuilder映射)中使用这些KM,或对其进行调整以适应您的特定要求。

OracleDataIntegrator实施五种不同类型的KM。

每一种都涵盖从源到目标转换流程中的一个阶段。

最重要的三类模块是 集成知识模块 (IKM)、加载知识模块 (LKM)以及检查知识模块CKM。

在本文中,我们将新建一个IKM。

我们对于此IKM的要求是将已分区的Sales事实表加载到 SalesHistory(SH)示例模式中。

为了改进事实表的加载性能,我们在加载过程中禁用了外键约束和位图索引。

加载后,这些禁用将会解除。

作为这个IKM的一部分,我们还将包括一个可选步骤,以允许我们在接口执行期间进行扩展跟踪。

前提条件和资源

本文基于OracleDatabase11g (11.1.0.7.0)和OracleDataIntegrator10.1.3.4.0。

本文假设您已经设置了OracleDataIntegrator主信息库和工作信息库。

请参阅“OracleDataIntegrator:

ETL项目入门”(PDF)了解详细信息。

下面是其他一些有帮助的资源:

▪“OracleDataIntegrator针对数据仓库的最佳实践”(PDF)

▪“Oracle示例系列—OracleDataIntegrator”

▪“OracleDataIntegrator替代方法参考”(PDF)

▪最后,您可能需要下载OracleDataIntegrator产品管理提供的双周刊网播。

▪可从此处下载完整的IKM。

要导入IKM,请将其保存至您的文件系统,并通过OracleDataIntegratorDesigner模块将其导入。

创建源模式

首先,我们将新建一个模式和一个表。

这将是我们的数据源。

我们还将向该表插入两条记录。

现实中,您的数据可能要远比这多,但为了演示目的,两条记录已足够。

通过SQL+以用户sys的身份登录并执行以下语句:

SQL>CREATEUSERsales_sourceIDENTIFIEDBYsales_source;

Usercreated.

SQL>GRANTCONNECTTOsales_source;

Grantsucceeded.

SQL>GRANTRESOURCETOsales_source;

Grantsucceeded.

SQL>CREATETABLEsales_source(

2PROD_IDNUMBERNOTNULL,

3CUST_IDNUMBERNOTNULL,

4TIME_IDDATENOTNULL,

5CHANNEL_IDNUMBERNOTNULL,

6PROMO_IDNUMBERNOTNULL,

7QUANTITY_SOLDNUMBERNOTNULL,

8AMOUNT_SOLDNUMBERNOTNULL

9);

Tablecreated.

SQL>INSERTINTOsales_sourceVALUES(13,987,TO_DATE

('01/01/1999','DD/MM/YYYY'),3,999,1,500);

1rowcreated.

SQL>INSERTINTOsales_sourceVALUES(13,987,TO_DATE

('01/04/1999','DD/MM/YYYY'),3,999,1,500);

1rowcreated.

SQL>COMMIT;

Commitcomplete.

接下来,我们授予目标模式用户SH执行dbms_monitor程序包的权限。

dbms_monitor程序包将允许我们启动扩展跟踪。

(请参阅这篇OracleMagazine文章获取有关dbms_monitor的更多信息。

SQL>grantexecuteondbms_monitortosh;

Grantsucceeded.

最后,我们为OracleDataIntegrator工作模式创建用户。

对于某些数据验证和转换操作,OracleDataIntegrator需要创建(临时)工作对象。

最好将这些对象放置在单独的模式中,以避免在数据仓库对象与临时工作对象之间出现混淆。

SQL>CREATEUSERodiIDENTIFIEDBYodi;

Usercreated.

SQL>GRANTCONNECT,RESOURCETOodi;

Grantsucceeded.

创建Development上下文

上下文用于将物理资源归组至同一环境中。

典型的上下文包括Development、UserAcceptanceTest(UAT)、Production等等。

我们使用TopologyManager创建上下文。

在本文中,我们将仅创建一个Development上下文。

在TopologyManager中,单击Context 选项卡,然后单击 InsertContext 图标。

这将显示上下文的 Definition 选项卡。

按照下图所示填充域。

现在,我们将为我们的源模式(SALES_SOURCE)创建物理和逻辑架构。

首先,我们为源模式创建物理架构。

在TopologyManager中,选择 PhysicalArchitecture 选项卡并展开 Technologies。

右键单击Oracle 并选择 InsertDataServer。

对于数据服务器的名称,我们将遵循“OracleDataIntegrator针对数据仓库的最佳实践”指南中的命名规则:

_(大写)。

因此,我们将数据服务器命名为ORCL_SALES_SOURCE_DEV。

我们按照下图所示填充Definition选项卡上的其他域。

/

切换至JDBC选项卡并按照下图所示进行填充。

您需要用服务器网络名或IP地址替换,用监听器端口号(通常为1521)替换,用实例服务名(OracleSID)替换

单击 Test 按钮确保输入了正确的数据,然后单击 OK。

在接下来的屏幕中,从 SALES_SOURCE 下拉菜单中选择 SALES_SOURCE 模式。

选择 ODI 作为Schema(WorkSchema)。

牢记OracleDataIntegrator将在此模式中创建临时工作对象。

保留其他域的默认值(如下图所示)。

单击 OK。

忽略以下警告消息:

在之前的步骤中,我们创建了物理模式。

现在,我们将为ORCL_SALES_SOURCE_DEV数据服务器创建逻辑模式。

在TopologyManager中,单击 LogicalSchema 选项卡。

展开 Technologies,右键单击 Oracle 并选择 InsertLogicalSchema。

我们需要再次遵循最佳实践指南中的命名规则:

_(大写)因此,我们将逻辑模式命名为ORCL_SALES_SOURCE。

对于Development上下文,从 PhysicalSchema 下拉菜单中选择 ORCL_SALES_SOURCE_DEV.SALES_SOURCE。

单击 OK。

为SH模式创建物理和逻辑架构

重复上一部分中的步骤为SH模式设置物理和逻辑模式。

调整名称、用户名、口令等以反映SH模式的属性。

将SALES_SOURCE和SH模型反向工程到OracleDataIntegratorDesigner模块中

我们使用OracleDataIntegrator模块反向工程源模式和目标模式的元数据。

登录Designer,单击 Models 选项卡,单击 InsertModelFolder 图标(如下图所示)。

将新模型命名为EDW并单击 OK。

接下来,右键单击新EDW文件夹并选择 InsertModel。

在Definition选项卡中,键入SALES_SOURCE。

从 Technology 下拉菜单中选择 Oracle,从 LogicalSchema 下拉菜单中选择ORCL_SALES_SOURCE。

切换至 Reverse 选项卡,并从 Context 下拉菜单中选择 Development。

其他域保留默认值。

接下来,单击 Reverse 按钮反向工程SALES_SOURCE模型。

反向工程过程可能需要一两分钟才能完成。

下一步是反向工程SH模式。

按照我们创建SALES_SOURCE模型的步骤,在EDW模型文件夹中创建SH模型。

创建IKM加载事实表

在此部分中,我们将创建一个新的IKM以通过实施最佳实践方法将事实表加载到数据仓库中。

我们将设置可选跟踪并禁用外键和索引预先加载。

加载完事实表后,我们将重新启用外键和索引,还将禁用跟踪。

开始之前,我们突出显示 Projects 选项卡并通过单击 InsertProject 图标创建一个新项目。

我们将此项目命名为EDW。

接下来,创建一个新的IKM。

展开EDW项目和KM文件夹,右键单击Integration文件夹并选择 InsertIntegration(IKM)。

我们将新的IKM命名为“IKMOracleAppend(DisableFKs&Indexes)”。

这遵循了命名KM的最佳实践:

<模块类型><技术><加载策略>(<实施详细信息>)。

还是从 TargetTechnology 下拉菜单中选择 Oracle。

通过 Details 选项卡,我们定义KM的单个步骤。

正如稍后所述,在一个接口中运行时每个步骤的执行都设置为可选。

下图显示了完整的IKM。

现在,我们将执行上述大部分步骤。

上述所有步骤都使用混合的SQL和OracleDataIntegrator替换API编写。

启动跟踪

我们使用dbms_monitor程序包启用对接口的跟踪。

注意,我们需要从PL/SQL块内调用session_trace_enable过程。

正如您从下图看到的那样,我们希望将跟踪等待事件设置为可选。

为此,我们定义了一个名为TRACE_WAITS的选项。

我们可以通过getOption替换API方法引用该选项。

此外,我们为该选项定义了默认值false。

因此,在接口中执行IKM时,默认情况下禁用跟踪。

稍后我们可以在通过接口执行IKM时改写该值。

在 Options 选项卡中,我们可以看见并未始终启用跟踪(未选中 AlwaysExecute 复选框)。

是否启用跟踪取决于Trace选项的值。

默认情况下,Trace选项设置为 No。

我们稍后可以在接口中更改此设置。

删除临时表

删除临时表将删除之前ETL运行中的记录。

我们使用odiRef.getTable替换API方法获取临时表的名称。

临时表引用为INT_NAME。

注意,我们已经选中了 IgnoreErrors 复选框。

在我们第一次运行ETL时,临时表还未创建。

如果我们尝试删除不存在的表,Oracle将返回错误消息。

为了防止ETL在遇到错误时停止执行,我们为此步骤选中 IgnoreErrors 复选框。

这就无需编写冗长的错误处理过程。

(注意,如果不删除临时表,我们还可以将其截断。

创建临时表

在删除了临时表以及所有旧记录后,我们可以重新创建该表。

我们将该表的属性PCTFREE设置为PCTFREE选项的值。

默认情况下,该值为0。

因为我们仅将记录插入该表且从不对其进行更新,所以我们可以使用该表数据块上的所有空间。

插入临时表

我们结合使用SQL和OracleDataIntegrator替换API将Sales临时表从SALES_SOURCE模式加载至我们的OracleDataIntegrator工作模式。

禁用FK约束

在将数据加载至Sales表之前,我们需要禁用外键。

对于大量数据,这将加快加载过程。

这对于性能关键的环境(如近乎实时数据仓库)非常重要。

OracleDataIntegrator在KM中包括了一种机制,使我们可以使用隐式游标对SQLSELECT语句返回的每行执行操作。

为此,您只需在KM步骤的 Source 选项卡中指定SELECT语句,在 Target 选项卡中指定操作代码。

这是一个非常不错的特性,因为这可省去用PL/SQL手动编码游标,从而节省了很多开发时间。

在 CommandonSource 选项卡下,我们按如下所示进行指定:

我们在OracleDataDictionary中查询user_constraints表,返回目标表上(SH目标模式中的Sales表)的所有外键约束列表。

在 CommandonTarget 选项卡中,我们可以通过为其加上前缀#符号引用目标表和约束名并禁用外键约束。

请注意,我针对隐式游标运行了扩展跟踪。

对于Sales目标表上的每个约束,OracleDataIntegrator都会向数据库服务器发送一条ALTERTABLE...语句。

因为Sales表上有五个外键,所以我们以五个ALTERTABLE...语句结束。

禁用BIX

在该步骤中,我们将禁用 Sales 事实表的位图索引。

这将加快事实表的加载速度。

我们仅禁用那些会将数据加载到其中的表分区上的位图索引。

在我们的示例中,这些将是1999年Q1和Q2的分区。

如之前的步骤所示,我们再次使用一个隐式OracleDataIntegrator游标实施该步骤。

对于 CommandonSource 选项卡,我们结合使用SQL和OracleDataIntegrator替换API方法检索插入到临时表中的不同time_id。

根据这些time_id,我们可以确定目标表中与其相关的分区。

odiRef.getTable("L","INT_NAME","W")替换API方法将为我们检索临时表。

在 CommandonTarget 窗口中,我们将指定语法以禁用目标表上的索引分区。

在接下来的几个步骤中,我们会将记录插入目标表中、重新启用外键约束、使位图索引可重用并禁用跟踪。

有关这些步骤的详细信息,我已经导出了该KM。

(本文篇首提供了一个下载IKM的链接,其中提供了有关如何将其导入OracleDataIntegrator的说明。

请注意,在实际的数据仓库应用场合中,我们需要向IKM多添加几个步骤,如收集目标表的统计信息、处理和回收约束违规、执行代理键查找等。

创建接口

接口是一个OracleDataIntegrator对象,支持加载其中数据转换自一个或多个源数据存储的目标数据存储(OracleDataIntegrator—代表某个表)。

OracleWarehouseBuilder中的相关对象是映射。

然而,由于KM可重用,创建OracleDataIntegrator接口的速度要比开发OracleWarehouseBuilder映射快很多。

创建接口之前,我们需要再导入两个KM:

一个用于从源系统(LKM)提取数据,另一个用于检查约束违规。

我们的接口中二者均需要。

要导入KM,需登录Designer,单击 Projects 选项卡并展开 KnowledgeModules。

右键单击 Loading(LKM) 并选择 ImportKnowledgeModules。

浏览至ImportExport文件夹(\oracledi\impexp)并选择 LKMSQLtoOracle。

单击 OK。

接下来,导入CKM。

同样,按照上述步骤进行,只是这次选择 CKMOracle。

单击 OK。

现在,我们已做好创建接口的准备。

展开EDW项目,也是第一个文件夹。

右键单击 Interfaces 并选择 InsertInterface。

根据最佳实践指南,接口的命名规则是Int.

我们将该接口命名为Int.SALESFACTLOAD。

还需在下拉菜单中将 OptimizationContext 设置为Development。

切换至Diagram选项卡。

 在 Models 选项卡中,将sales_source数据存储从Sales_Source模型拖放至 Sources 区域。

将Sales表从SH模型拖放至 TargetDatastore 区域。

系统将提示您执行自动映射。

单击 Yes 确认。

接下来,单击 Errors 按钮确保您的映射中检测不到错误。

然后,单击 Flow 选项卡。

在打开的屏幕中,单击 SALES_SOURCE 数据存储并从 LKMSelection 下拉菜单中选择 LKMSQLtoOracle。

接下来,单击 Target+StagingArea。

从 IKMSelection 下拉菜单中选择我们的 IKMOracleAppend(DisableFKs&Indexes)。

在屏幕底部的 Option 区域中,突出显示 TraceOption 并将其设置为 Yes。

这将改写跟踪的默认值,因此,在执行接口期间将启用跟踪。

然后,单击 Controls 选项卡,从 SelectyourKM 下拉菜单中选择 CKMOracle。

现在,我们可以运行接口并测试KM了。

单击 Execute 按钮,在显示的弹出菜单中选择 Development 作为Context。

最后,单击 OK。

为了验证接口的执行状态,需要登录OracleDataIntegratorOperator模块。

在Operator模块中,我们可以全方位地详细查看执行统计信息和错误。

例如,在以下的执行统计信息中,我们可以看到执行时间最长的步骤是EnableFKconstraints。

该步骤用了六秒钟。

我们还可以看到我们将两条记录插入了临时表,将两条记录插入了事实表。

恭喜,您已经成功创建了一个新的OracleDataIntegratorIKM。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1