在 Oracle Data Integrator 中开发知识模块

http://www.chinaitbbs.com/redirect.php?tid=63554&goto=lastpost

Oracle Data Integrator 中的知识模块 (KM) 是在不同技术间实施可重用转换和 ELT(提取、加载和转换)策略的组件。例如,通过从 Oracle 数据库 10g 中的更改数据捕获提取数据,而后将转换的数据加载到 Oracle 数据库 11g 中已分区的事实表中,或者从 Microsoft SQL Server 数据库创建基于时间戳的提取,而后将该数据加载到 Teradata 企业数据仓库中。 KM 的强大在于其可重用性和灵活性 — 例如,您可以针对某个事实表开发和实施加载策略,然后只需点击鼠标,即可将此加载策略应用到所有的事实表。如果您调整 ELT 策略以适应不断变化的业务要求并修改相关 KM,则所有使用该 KM 的接口都将继承该更改。您可以混合搭配不同的编程语言、类型和样式(本地 RDBMS SQL、脚本编写语言,如 Jython 或 JavaScript,甚至是 Java)。这使得这些 KM 变得极为灵活。这种创新方法称为 Oracle Data Integrator 声明式设计,可比传统的 ELT 方法快 10 倍。 
Oracle Data Integrator 附带了各种预定义的 KM。您可以直接在 ELT 接口(等同于 Oracle Warehouse Builder 映射)中使用这些 KM,或对其进行调整以适应您的特定要求。Oracle Data Integrator 实施五种不同类型的 KM。每一种都涵盖从源到目标转换流程中的一个阶段。最重要的三类模块是 集成知识模块 (IKM)、加载知识模块 (LKM) 以及检查知识模块 CKM。 
在本文中,我们将新建一个 IKM。我们对于此 IKM 的要求是将已分区的 Sales 事实表加载到Sales History (SH) 示例模式中。为了改进事实表的加载性能,我们在加载过程中禁用了外键约束和位图索引。加载后,这些禁用将会解除。作为这个 IKM 的一部分,我们还将包括一个可选步骤,以允许我们在接口执行期间进行扩展跟踪。 
前提条件和资源本文基于 Oracle 数据库 11g (11.1.0.7.0) 和 Oracle Data Integrator 10.1.3.4.0。
本文假设您已经设置了 Oracle Data Integrator 主信息库和工作信息库。
创建源模式
  • 首先,我们将新建一个模式和一个表。这将是我们的数据源。我们还将向该表插入两条记录。现实中,您的数据可能要远比这多,但为了演示目的,两条记录已足够。通过 SQL+ 以用户 sys 的身份登录并执行以下语句:
    SQL> CREATE USER sales_source IDENTIFIED BY sales_source;
    User created.
    SQL> GRANT CONNECT TO sales_source;
    Grant succeeded.
    SQL> GRANT RESOURCE TO sales_source;
    Grant succeeded.
    SQL> CREATE TABLE sales_source (  2          PROD_ID NUMBER NOT NULL ,  3          CUST_ID NUMBER NOT NULL ,  4          TIME_ID DATE NOT NULL ,  5          CHANNEL_ID NUMBER NOT NULL ,  6          PROMO_ID NUMBER NOT NULL ,  7          QUANTITY_SOLD NUMBER NOT NULL ,  8          AMOUNT_SOLD NUMBER NOT NULL  9  ) ;
    Table created.
    SQL> INSERT INTO sales_source VALUES (13,987,TO_DATE('01/01/1999','DD/MM/YYYY'),3,999,1,500);
    1 row created.
    SQL> INSERT INTO sales_source VALUES (13,987,TO_DATE('01/04/1999','DD/MM/YYYY'),3,999,1,500);
    1 row created.
    SQL> COMMIT;
    Commit complete.
    接下来,我们授予目标模式用户 SH 执行 dbms_monitor 程序包的权限。dbms_monitor 程序包将允许我们启动扩展跟踪。SQL> grant execute on dbms_monitor to sh;Grant succeeded.最后,我们为 Oracle Data Integrator 工作模式创建用户。对于某些数据验证和转换操作,Oracle Data Integrator 需要创建(临时)工作对象。最好将这些对象放置在单独的模式中,以避免在数据仓库对象与临时工作对象之间出现混淆。 SQL> CREATE USER odi IDENTIFIED BY odi;
    User created.
    SQL> GRANT CONNECT,RESOURCE TO odi;
    Grant succeeded.
    创建 Development 上下文上下文用于将物理资源归组至同一环境中。典型的上下文包括 Development、User Acceptance Test (UAT)、Production 等等。 
    我们使用 Topology Manager 创建上下文。在本文中,我们将仅创建一个 Development 上下文。在 Topology Manager 中,单击 Context 选项卡,然后单击 Insert Context 图标。这将显示上下文的 Definition 选项卡。按照下图所示填充域。 

    现在,我们将为我们的源模式 (SALES_SOURCE) 创建物理和逻辑体系结构。 首先,我们为源模式创建物理体系结构。在 Topology Manager 中,选择 Physical Architecture 选项卡并展开Technologies。右键单击 Oracle 并选择 Insert Data Server。 

    对于数据服务器的名称,我们将遵循“Oracle Data Integrator 针对数据仓库的最佳实践”指南中的命名规则:<TECH_NAME>_<SRV_NAME>(大写)。因此,我们将数据服务器命名为 ORCL_SALES_SOURCE_DEV。我们按照下图所示填充 Definition 选项卡上的其他域。 切换至 JDBC 选项卡并按照下图所示进行填充。您需要用服务器网络名或 IP 地址替换 <host>,用监听器端口号(通常为 1521)替换 <port>,用实例服务名 (Oracle SID) 替换 <sid>。

    单击 Test 按钮确保输入了正确的数据,然后单击 OK。 在接下来的屏幕中,从SALES_SOURCE 下拉菜单中选择 SALES_SOURCE 模式。选择 ODI 作为 Schema (Work Schema)。牢记 Oracle Data Integrator 将在此模式中创建临时工作对象。保留其他域的默认值(如下图所示)。单击 OK。 

    忽略以下警告消息:

    在之前的步骤中,我们创建了物理模式。现在,我们将为 ORCL_SALES_SOURCE_DEV 数据服务器创建逻辑模式。 在 Topology Manager 中,单击 Logical Schema 选项卡。展开Technologies,右键单击 Oracle 并选择 Insert Logical Schema。我们需要再次遵循最佳实践指南中的命名规则:<TECH_NAME>_<SCHEMA_NAME>(大写)因此,我们将逻辑模式命名为 ORCL_SALES_SOURCE。 对于 Development 上下文,从 Physical Schema 下拉菜单中选择 ORCL_SALES_SOURCE_DEV.SALES_SOURCE。单击 OK。 

    为 SH 模式创建物理和逻辑体系结构重复上一部分中的步骤为 SH 模式设置物理和逻辑模式。调整名称、用户名、口令等以反映 SH 模式的属性。 
    将 SALES_SOURCE 和 SH 模型反向工程到 Oracle Data Integrator Designer 模块中我们使用 Oracle Data Integrator 模块反向工程源模式和目标模式的元数据。登录 Designer,单击Models 选项卡,单击 Insert Model Folder 图标(如下图所示)。 

    将新模型命名为 EDW 并单击 OK。 接下来,右键单击新 EDW 文件夹并选择 Insert Model。 
    在 Definition 选项卡中,键入 SALES_SOURCE。从 Technology 下拉菜单中选择 Oracle,从Logical Schema 下拉菜单中选择 ORCL_SALES_SOURCE。 

    切换至 Reverse 选项卡,并从 Context 下拉菜单中选择 Development。其他域保留默认值。

    接下来,单击 Reverse 按钮反向工程 SALES_SOURCE 模型。反向工程过程可能需要一两分钟才能完成。 下一步是反向工程 SH 模式。按照我们创建 SALES_SOURCE 模型的步骤,在 EDW 模型文件夹中创建 SH 模型。
    创建 IKM 加载事实表在此部分中,我们将创建一个新的 IKM 以通过实施最佳实践方法将事实表加载到数据仓库中。我们将设置可选跟踪并禁用外键和索引预先加载。加载完事实表后,我们将重新启用外键和索引,还将禁用跟踪。
    开始之前,我们突出显示 Projects 选项卡并通过单击 Insert Project 图标创建一个新项目。 

    我们将此项目命名为 EDW。 接下来,创建一个新的 IKM。 
    展开 EDW 项目和 KM 文件夹,右键单击 Integration 文件夹并选择 Insert Integration (IKM)。 
    我们将新的 IKM 命名为“IKM Oracle Append (Disable FKs & Indexes)”。这遵循了命名 KM 的最佳实践:<模块类型> <技术> <加载策略> (<实施详细信息>)。还是从 Target Technology下拉菜单中选择 Oracle。 

    通过 Details 选项卡,我们定义 KM 的单个步骤。正如稍后所述,在一个接口中运行时每个步骤的执行都设置为可选。 下图显示了完整的 IKM。

    现在,我们将执行上述大部分步骤。上述所有步骤都使用混合的 SQL 和 Oracle Data Integrator 替换 API 编写。
    启动跟踪我们使用 dbms_monitor 程序包启用对接口的跟踪。注意,我们需要从 PL/SQL 块内调用 session_trace_enable 过程。 

    正如您从下图看到的那样,我们希望将跟踪等待事件设置为可选。为此,我们定义了一个名为 TRACE_WAITS 的选项。我们可以通过 getOption 替换 API 方法引用该选项。此外,我们为该选项定义了默认值 false。因此,在接口中执行 IKM 时,默认情况下禁用跟踪。稍后我们可以在通过接口执行 IKM 时改写该值。

    在 Options 选项卡中,我们可以看见并未始终启用跟踪(未选中 Always Execute 复选框)。是否启用跟踪取决于 Trace 选项的值。

    默认情况下,Trace 选项设置为 No。我们稍后可以在接口中更改此设置。

    删除临时表删除临时表将删除之前 ETL 运行中的记录。我们使用 odiRef.getTable 替换 API 方法获取临时表的名称。临时表引用为 INT_NAME。注意,我们已经选中了 Ignore Errors 复选框。在我们第一次运行 ETL 时,临时表还未创建。如果我们尝试删除不存在的表,Oracle 将返回错误消息。为了防止 ETL 在遇到错误时停止执行,我们为此步骤选中 Ignore Errors 复选框。这就无需编写冗长的错误处理过程。(注意,如果不删除临时表,我们还可以将其截断。) 

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

    我们将该表的属性 PCTFREE 设置为 PCTFREE 选项的值。默认情况下,该值为 0。因为我们仅将记录插入该表且从不对其进行更新,所以我们可以使用该表数据块上的所有空间。

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

    禁用 FK 约束在将数据加载至 Sales 表之前,我们需要禁用外键。对于大量数据,这将加快加载过程。这对于性能关键的环境(如近乎实时数据仓库)非常重要。 
    Oracle Data Integrator 在 KM 中包括了一种机制,使我们可以使用隐式游标对 SQL SELECT 语句返回的每行执行操作。为此,您只需在 KM 步骤的 Source 选项卡中指定 SELECT 语句,在Target 选项卡中指定操作代码。这是一个非常不错的特性,因为这可省去用 PL/SQL 手动编码游标,从而节省了很多开发时间。 
    在 Command on Source 选项卡下,我们按如下所示进行指定: 

    我们在 Oracle Data Dictionary 中查询 user_constraints 表,返回目标表上(SH 目标模式中的 Sales 表)的所有外键约束列表。 在 Command on Target 选项卡中,我们可以通过为其加上前缀 # 符号引用目标表和约束名并禁用外键约束。 

    请注意,我针对隐式游标运行了扩展跟踪。对于 Sales 目标表上的每个约束,Oracle Data Integrator 都会向数据库服务器发送一条 ALTER TABLE... 语句。因为 Sales 表上有五个外键,所以我们以五个 ALTER TABLE... 语句结束。 禁用 BIX在该步骤中,我们将禁用 Sales 事实表的位图索引。这将加快事实表的加载速度。我们仅禁用那些会将数据加载到其中的表分区上的位图索引。在我们的示例中,这些将是 1999 年 Q1 和 Q2 的分区。 

    如之前的步骤所示,我们再次使用一个隐式 Oracle Data Integrator 游标实施该步骤。对于Command on Source 选项卡,我们结合使用 SQL 和 Oracle Data Integrator 替换 API 方法检索插入到临时表中的不同 time_id。根据这些 time_id,我们可以确定目标表中与其相关的分区。odiRef.getTable ("L","INT_NAME","W") 替换 API 方法将为我们检索临时表。 

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

    在接下来的几个步骤中,我们会将记录插入目标表中、重新启用外键约束、使位图索引可重用并禁用跟踪。有关这些步骤的详细信息,我已经导出了该 KM。(本文篇首提供了一个下载 IKM 的链接,其中提供了有关如何将其导入 Oracle Data Integrator 的说明。) 请注意,在实际的数据仓库应用场合中,我们需要向 IKM 多添加几个步骤,如收集目标表的统计信息、处理和回收约束违规、执行代理键查找等。 
    创建接口接口是一个 Oracle Data Integrator 对象,支持加载其中数据转换自一个或多个源数据存储的目标数据存储(Oracle Data Integrator — 代表某个表)。Oracle Warehouse Builder 中的相关对象是映射。然而,由于 KM 可重用,创建 Oracle Data Integrator 接口的速度要比开发 Oracle Warehouse Builder 映射快很多。 
    创建接口之前,我们需要再导入两个 KM:一个用于从源系统 (LKM) 提取数据,另一个用于检查约束违规。我们的接口中二者均需要。 
    要导入 KM,需登录 Designer,单击 Projects 选项卡并展开 Knowledge Modules。右键单击 Loading (LKM) 并选择 Import Knowledge Modules。浏览至 Import Export 文件夹 (<odi home>/oracledi/impexp) 并选择 LKM SQL to Oracle。单击 OK。 

    接下来,导入 CKM。同样,按照上述步骤进行,只是这次选择 CKM Oracle。单击 OK

    现在,我们已做好创建接口的准备。 展开 EDW 项目,也是第一个文件夹。右键单击 Interfaces并选择 Insert Interface。根据最佳实践指南,接口的命名规则是 Int.<TARGET_TABLE> <DETAILS>。我们将该接口命名为 Int.SALES FACT LOAD。还需在下拉菜单中将Optimization Context 设置为 Development。 

    切换至 Diagram 选项卡。 在 Models 选项卡中,将 sales_source 数据存储从 Sales_Source 模型拖放至 Sources 区域。将 Sales 表从 SH 模型拖放至 Target Datastore区域。系统将提示您执行自动映射。单击 Yes 确认。

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

    然后,单击 Flow 选项卡。在打开的屏幕中,单击 SALES_SOURCE 数据存储并从 LKM Selection 下拉菜单中选择 LKM SQL to Oracle

    接下来,单击 Target+Staging Area。从 IKM Selection 下拉菜单中选择我们的 IKM Oracle Append (Disable FKs & Indexes)。在屏幕底部的 Option 区域中,突出显示Trace Option 并将其设置为 Yes。这将改写跟踪的默认值,因此,在执行接口期间将启用跟踪。

    然后,单击 Controls 选项卡,从 Select your KM 下拉菜单中选择 CKM Oracle

    现在,我们可以运行接口并测试 KM 了。单击 Execute 按钮,在显示的弹出菜单中选择Development 作为 Context。最后,单击 OK

    为了验证接口的执行状态,需要登录 Oracle Data Integrator Operator 模块。在 Operator 模块中,我们可以全方位地详细查看执行统计信息和错误。例如,在以下的执行统计信息中,我们可以看到执行时间最长的步骤是 Enable FK constraints。该步骤用了六秒钟。我们还可以看到我们将两条记录插入了临时表,将两条记录插入了事实表。

    恭喜,您已经成功创建了一个新的 Oracle Data Integrator IKM。

你可能感兴趣的:(oracle,sql,schema,数据仓库,insert,constraints)