目的
本教程描述了如何在 Warehouse Builder 中设计映射和进程流,以及如何使用它们来定义数据移动和转换。在 Warehouse Builder 中设计映射时,您需要使用 Mapping Editor 界面。在 Mapping Editor 中有很多映射运算符可供使用。Oracle Warehouse Builder 允许您使用 Warehouse Builder 外部的活动(例如,电子邮件、FTP 命令和操作系统可执行文件)。本教程不讨论外部活动。使用 Process Flow Editor,您可以学习如何设计将映射与其他活动互联的进程流。
在本教程中,您将学习如何创建映射,以便从源中提取数据、转换数据并将其加载到目标中。本文还简要说明了 Debugging Editor,以在 Mapping Editor 中调试数据流。
主题
本教程包括下列主题:
概述
前提条件
设计映射
设计进程流
测试和调试映射
总结
既然您已经定义了源模块和目标模块,下面将学习如何创建数据移动和转换逻辑。ETL 表示提取 (Extract)、转换 (Transform) 和加载 (Load)。它包括将数据从源中进行移动和转换以使其进入目标的过程。您在 Oracle Warehouse Builder 中进行的大部分设计工作是定义 ETL 逻辑。
开始学习本教程之前,您应已经:
1. | 下载了 owbdemo_files.zip 文件,并将文件解压缩到计算机的硬盘驱动器上。 |
2. | 完成了教程 1、2 和 3。 |
3. | 安装了 Oracle Workflow Server 2.6.4,具体操作在以下注释和步骤 4 中说明。 注:如果您将 Oracle 数据库 10g 第 2 版 (10.2.0.3) 实例与 OWB 11g 配合使用,请从 Warehouse Builder 11g 安装的 <OWB 11g 主目录>\owb\wf\install 目录中安装 Workflow Server 2.6.4,然后调用 wfinstall.csh(针对 Unix)或 wfinstall.bat(针对 Windows 平台)。您必须在 Oracle 数据库 主目录(而非 OWB 主目录或任何其他主目录)中安装 Workflow Server。 如果您将 Oracle 数据库 11g 实例与 OWB 11g 配合使用,则需要安装已针对数据库 11g 进行了更改的 Workflow Server 2.6.4 版本。转到数据库 11g 安装的 <Oracle11g 数据库主目录>\owb\wf\install 目录,并调用 wfinstall.csh(针对 Unix)或 wfinstall.bat(针对 Windows 平台)。您必须在 Oracle 数据库 主目录(而非 OWB 主目录或任何其他主目录)中安装 Workflow Server。 |
4. | 在 Windows 上启动安装和配置脚本: 输入下列值:
输入所有必需的值后,单击 Submit 开始 Workflow 配置过程。 配置过程完成后,Workflow Configuration Assistant 将显示一个包含“Workflow Configuration has completed successfully”消息的对话框。单击 OK。现已退出安装脚本。 最后,您需要授予 owf_mgr 用户“EXECUTE ANY PROCEDURE”权限。以“SYS as sysdba”用户身份连接到 SQL Plus,发出以下命令:grant execute any procedure to owf_mgr |
映射将从源提取数据,转换数据,并将数据加载到您在前面教程中定义的目标模块 (EXPENSE_WH) 中。
在该主题中,您将学习如何:
检查关系表和维之间的预定义映射
设计外部表和维之间的映射
设计外部表和多维数据集之间的映射
在该子主题中,您将检查 CHANNELS 关系表和 CHANNELS 维之间的 LOAD_CHANNELS 预定义映射。此示例使用了与之前所定义内容不同的目标模块 SALES_WH 以及源和目标。要熟悉 Mapping Editor,执行以下步骤:
1. | 在 Design Center 的 Project Explorer 面板中,展开 OWB_DEMO。展开 Databases > Oracle > SALES_WH > Mappings。双击 LOAD_CHANNELS。 此时 Mapping Editor 将启动 LOAD_CHANNELS 映射。 |
2. | 使用 Mapping Editor 界面在 Warehouse Builder 中设计一个映射。在设计映射时,您将从 Mapping Editor Palette 面板中选择运算符,并将其置于画布上。 提示: 如果您不能看到与下面屏幕截图类似的所有对象,请在 Mapping Editor 的工具栏中单击 Auto-Layout ,使该映射恢复到默认大小。通过单击最大化图标 将画布上的运算符最大化。 在 Mapping Editor 中,您可以在画布上看到以下运算符: a) 名为 CHANNELS_IN 的表运算符 b) 名为 TOTALS 的常量运算符 c) 名为 CHANNELS_OUT 的维运算符 d) 属性之间的连接线 |
3. | 在 LOAD_CHANNELS 映射中,单击表运算符 CHANNELS_IN 的标题。这将使其成为当前选定的对象。右键单击表运算符 CHANNELS_IN 的标题,然后选择 Open Details。这将以选项卡格式启动 Table Editor。
每个选项卡都可帮助执行与该运算符相关的任务。例如,通过 Name 选项卡,您可以指定运算符的名称,并可以对其进行描述。 单击 Cancel 关闭 Table Editor。 |
4. | 在 LOAD_CHANNELS 映射中,确保选中 CHANNELS_IN 表运算符。(单击表运算符 CHANNELS_IN 的标题。)要确定运算符的绑定名称,在 Table Operator Properties 面板中向下滚动到 Bound Name 属性。此运算符是与 XSALES 模式中的 CHANNELS 表进行绑定的。 提示:您还可以将鼠标移到运算符的标题上。如果该运算符当前已绑定,您将看到按以下格式显示的完整信息:Operator :bound to //模块名称/运算符绑定名称(例如,Operator CHANNELS_IN:bound to MY_WORKSPACE/OWB_DEMO/XSALES/CHANNELS)。 注:绑定名称是与映射中的对象运算符相连对象的物理名称。绑定名称用于在代码生成的过程中引用该对象。 |
5. | 在 LOAD_CHANNELS 映射中,维运算符的名称为 CHANNELS_OUT。该运算符绑定到 SALES_WH 目标模式中的 CHANNELS 维上。 |
6. | 在 LOAD_CHANNELS 映射中,常量运算符的名称为 TOTALS。您可以通过常量运算符来定义常量值。常量可在映射的任意位置使用。常量运算符会产生一个输出组,其中可包含一个或多个常量属性。要在画布上添加常量运算符,您应该从 Palette 中拖出一个常量运算符。 提示:使用常量运算符的一个示例是,将当前系统日期值加载到表运算符中。 要向 TOTALS 常量对象添加属性,右键单击常量运算符 TOTALS 的标题,然后选择 Open Details。单击 Output Attributes 选项卡。单击 Add 会将属性添加到 Totals 常量对象中。如屏幕截图所示,Totals 常量对象已经添加了两个属性。 单击 Cancel 来关闭 Constant Editor。 |
7. | 在 LOAD_CHANNELS 映射中,通过在常量运算符 TOTALS 中选择 TOT 属性来选择该属性。在 Mapping Editor 左侧的 Attribute Properties 面板中,检查 Expression 属性。在 Attribute Properties 面板中,单击 Expression 属性旁边的字段。单击右侧的 按钮。此时 Expression Builder 启动。TOT 属性的值为“Channels Total”。关闭 Expression Editor。 |
8. | 在 LOAD_CHANNELS 映射中,您将看到以下连接线:
在此示例中,您通过连接各个运算符的属性完成了对运算符的连接。连接线以图形的形式表示了数据是如何通过运算符从源流向目标的。 关闭 Mapping Editor。 |
返回主题
在该子主题中,您将进行一个上机操作来创建外部表 EXPENSE_CATEGORIES_CSV 到维 REL_CATEGORY 之间的 REL_CATEGORY_MAP 映射。
1. | 在 Project Explorer 中展开 OWB_DEMO。展开 Databases > Oracle > EXPENSE_WH > Mappings。请注意,您看到的 REL_TIME_MAP 映射是在使用 Time Wizard 创建时间维 REL_TIME 时由 OWB 自动创建的。 右键单击 Mappings,然后选择 New。 此时出现 Create Mapping 窗口。 |
2. | 在 Create Mapping 窗口中,输入 REL_CATEGORY_MAP 作为映射的名称。单击 OK。 在 Project Explorer 面板中,您可以在 EXPENSE_WH 模块的下方看到 REL_CATEGORY_MAP 映射的条目。此时 Mapping Editor 启动 REL_CATEGORY_MAP 映射。 |
3. | 从 Palette 中,将 Dimension Operator 拖到画布上。此时出现 Add Dimension Operator 窗口。 在 Add Dimension Operator 窗口中,导航至 EXPENSE_WH 模块,然后选择 REL_CATEGORY 维。单击 OK。 |
4. | 将 REL_CATEGORY 维对象放到画布上。 |
5. | 另外,您还可以通过 Mapping Editor 左侧的 Explorer 面板将现有的源和目标添加到映射中。在 Explorer 面板中,确保选中了 Available Objects 选项卡。展开 Oracle > EXPENSE_WH > External Tables。将 EXPENSE_CATEGORIES 拖到画布上。 现在画布上有两个对象,EXPENSE_CATEGORIES 外部表和 REL_CATEGORY 维。 提示:在 Mapping Editor 中,单击工具栏上的 Auto-Layout ,将映射更改为默认大小。通过拖放方式,将 EXPENSE_CATEGORIES 外部表移动到 REL_CATEGORY 维的左侧。通过单击最大化图标 将 EXPENSE_CATEGORIES 外部表最大化。使用同样的方式,最大化 REL_CATEGORY 维。 |
6. | 按照下列方式,将源(EXPENSE_CATEGORIES 外部表)与目标(REL_CATEGORY 维)连接:
提示:连接线以图形的形式表示了数据是如何通过运算符从源流向目标的。 注:请特别注意连接线在 REL_CATEGORY 目标维中的放置位置。该维有两个级别 CATEGORY 和 TYPE,每个级别都具有名称相同的属性 ID、NAME 和 DESCRIPTION。 |
7. | 您刚刚完成了映射的设计。现在,您可以为该映射生成代码。从 Mapping Editor 的菜单中,选择 Mapping > Generate。您已经生成了用于加载维的代码。根据您在映射中设计的 ETL 逻辑,Warehouse Builder 将生成实施设计所需的代码。 此时显示 Generation Results 窗口。Generation Results 窗口会显示为您生成的代码。 关闭 Mapping Editor。 |
返回主题
在该子主题中,您将进行一个上机操作来创建外部表 EXPORT_CSV 到多维数据集 REL_EXPENSE 的 REL_EXPENSE_MAP 映射。
1. | 在 Project Explorer 中展开 OWB_DEMO。展开 Databases > Oracle > EXPENSE_WH > Mappings。右键单击 Mappings 节点,并选择 New。 此时出现 Create Mapping 窗口。 |
2. | 在 Create Mapping 窗口中,输入 REL_EXPENSE_MAP 作为映射的名称。单击 OK。 在 Project Explorer 中,您可以在 EXPENSE_WH 模块的下方看到 REL_EXPENSE_MAP 映射的条目。此时 Mapping Editor 启动。 |
3. | 在 Mapping Editor 左侧的 Explorer 面板中,确保选中了 Available Objects 选项卡。展开 Oracle > EXPENSE_WH > External Tables。将 EXPENSE_DATA 外部表拖到画布中。 此时,EXPENSE_DATA 外部表对象已经位于画布中。 |
4. | 在 Explorer 面板中,确保选中了 Available Objects 选项卡。展开 Oracle > EXPENSE_WH > Cubes。将 REL_EXPENSE 多维数据集拖到画布中。 现在画布上有两个对象,EXPENSE_DATA 外部表运算符和 REL_EXPENSE 多维数据集运算符。 提示:在 Mapping Editor 中,单击工具栏上的 Auto-Layout ,将映射恢复到默认大小。 确保外部表运算符 EXPENSE_DATA 位于多维数据集运算符 REL_EXPENSE 的左侧。通过单击最大化图标 将 EXPENSE_DATA 外部表运算符最大化。用同样的方式,将 REL_EXPENSE 多维数据集运算符最大化。 |
5. | 从 Mapping Editor 的 Palette 面板中,将 Expression 运算符拖到画布中。 在此示例中,Expression 运算符用于将 EXPENSE_DATA 外部表中的 EXPENSE_DATE 属性从 date 数据类型转换为 number 数据类型。由于多维数据集中的目标属性是 number 数据类型,因此为了匹配该数据类型,您需要进行数据类型转换。 |
6. | 拖放一条从 EXPENSE_DATA.OUTGRP1.EXPENSE_DATE 到 EXPRESSION.INGRP1 的连接线。 |
7. | 右键单击表达式运算符 EXPRESSION 的标题,然后选择 Open Details。 |
8. | 在 Expression Editor 中,单击 Output Attributes 选项卡。单击 Add。 |
9. | 将 OUTPUT1 属性重命名为 EXPENSE_DATE。确保数据类型为 NUMBER。单击 OK。 |
10. | 在 Mapping Editor 中,单击表达式运算符 EXPRESSION 的标题,然后选择 OUTGRP1.EXPENSE_DATE。在 Attribute Properties 面板中,单击 Expression 属性旁边的字段。单击右侧的 按钮。 此时 Expression Builder 启动。 |
11. | 在 Expression Builder 中,在 Expression for EXPENSE_DATE 中输入以下语句: TO_NUMBER(TO_CHAR(INGRP1.EXPENSE_DATE , 'YYYYMMDD'), '99999999') 单击 Validate。请等待,直到 Validation results 面板中显示成功消息。单击 OK。 |
12. | 按照下列方式连接源运算符与目标运算符:
您刚刚完成了映射的设计。现在可以生成映射的代码。 |
13. | 从 Mapping Editor 的菜单中,选择 Mapping > Generate。Warehouse Builder 将生成实施设计所需的代码。 提示:要在以后查看生成的结果,请从 Window 菜单中选择 Generation Results。 从工具栏中,单击 Save All 提交您的工作。关闭 Mapping Editor。 |
当您创建映射(该映射定义将数据从源移到目标的操作)之后,就可以创建并定义进程流了。进程流可以将映射与 Warehouse Builder 外部的活动(如电子邮件)互联。在 OWB 中,进程流用于管理映射与相关活动的执行,例如,使用 FTP 将文件上载到 Warehouse 计算机,或者在加载过程出现错误时通知管理员。
本示例中使用的案例很常见。维(REL_TIME 和 REL_CATEGORY)必须在多维数据集 (REL_EXPENSE) 之前加载,因为多维数据集将引用维值。只有在成功加载所有维之后,才会开始加载多维数据集。现在,您将学习如何设计进程流。
Process Flow Editor 包含各种不同的活动,您可以添加它们并使用转换连接这些活动以进行流的设计。活动表示进程流中的工作单元。这些工作单元可以包含 Warehouse Builder 内部或外部的组件。转换指示启动活动的顺序和条件。
在该主题中,您将学习如何:
注册 Oracle Workflow 用户 | ||
设计进程流 |
您需要授予 Oracle Workflow (OWF) 用户 owf_mgr 特定角色,使其具有在 Control Center 中执行进程流的权限。
您不必将 Control Center 的口令嵌入 OWF 用户所拥有的数据库链接中。Control Center 用户具有高特权,其口令受到严格控制。
要注册 OWF 用户,可以从 Global Explorer 面板中的 Security > Users 节点使用 Register Warehouse Builder Users 向导。要访问 Security 节点,请确保以信息库所有者的身份登录到 Design Center。
1. | 如果尚未登录,以用户名/口令 rep_owner/rep_owner 登录 Design Center。 在 Global Explorer 面板中展开 Security 节点。右键单击 Users 节点并选择 New。 注:在创建新用户之前,您必须先保存或恢复您的更改。要保存以前的更改,请从 Design 菜单中选择 Save All,或者单击工具栏中的 。 此时出现 Create User 对话框。 |
2. | 在 Create User 对话框中,您可以从可用数据库用户列表中进行选择,也可以创建一个新用户,该用户将自动注册为 Warehouse Builder 用户。 在本教程前面的部分中,我们说明了如何安装 Oracle Workflow Server,如何使用 Oracle Workflow Configuration Assistant,以及如何将 owf_mgr 指定为工作流帐户。其结果是将 owf_mgr 创建为数据库用户。从 Available DB Users 列表中选择 owf_mgr,单击 > 将其移至 Selected Users 列表。单击 OK。
注意,owf_mgr 用户已添加到 Global Explorer 面板的 Security > Users 节点中。 |
返回主题
1. | 在开始设计进程流之前,您需要创建一个包含进程流程序包的进程流模块。 注:进程流模块包含的进程流程序包中包含进程流。进程流程序包是一个分组机制,用于确定您所能互联的进程流。运行期间,您可以启动一个进程流,它可以启动同一进程流程序包中的其他进程流。 您将创建一个名为 MY_PF_MODULE 的进程流模块、一个名为 PK 的进程流程序包以及一个进程流 MY_PROC。进程流模块充当容器,您可以用它来验证、生成和部署一组进程流。 在 Project Explorer 中,展开 OWB_DEMO 项目,然后展开 Process Flows 节点。右键单击 Process Flow Modules,并从菜单中选择 New。 此时 Create Module 向导启动。在 Welcome 页面中单击 Next。 |
2. | 在 Name and Description 页面中,输入 MY_PF_MODULE 作为进程流模块的名称。单击 Next。 |
3. | 现在,为进程流模块 MY_PF_MODULE 创建一个 Oracle Workflow 位置。 注: 您需要定义一个 Oracle Workflow 位置以指定您想在哪里部署您的进程流。Oracle Workflow 位置指向目标数据库中运行的工作流模式 (OWF_MGR)。Warehouse Builder 进程流符合 XML 流程定义语言 (XPDL)。当您生成进程流时,Warehouse Builder 将以 XPDL 格式生成 XML 文件。您可以将生成的 XML 文件插入遵循 XPDL 标准的任何工作流引擎。 在 Connection Information 页面中,可以看到 Warehouse Builder 创建了一个默认名为 MY_PF_MODULE_LOCATION1 的位置。单击 Edit 指定 Workflow 位置的详细信息。 在 Edit Oracle Workflow Location 窗口中,将位置名称更改为 WH_OWF_LOCATION。指定 Oracle Workflow 模式的连接详细信息。本教程使用 owf_mgr 作为模式名,使用 owf_mgr 作为口令。如果您的 Oracle Workflow 模式有着不同的名称和口令,请进行相应替换。 Password:owf_mgr 单击 Test Connection。如果连接成功,单击 OK。如果连接失败,检查连接详细信息并重试。 单击 OK 后,您将返回向导的 Connection Information 页面。单击 Next。在 Summary 页面中,检查详细信息,然后单击 Finish。 |
4. | 此时 Create Process Flow Package 窗口启动。指定 PK 作为名称,并单击 OK。 |
5. | 此时 Create Process Flow 窗口启动。指定 LOAD_EXPENSE_WH 作为进程流的名称。 单击 OK。 Warehouse Builder 启动 Process Editor 并显示包含一个 Start 活动和一个 End_Success 活动的进程流。现在,您将学习如何使用活动和转换设计进程流。 |
6. | 在 Process Editor 的 Palette 面板中,将 Fork 活动拖到画布上。一个活动结束后,您可以使用 Fork 活动启动多个并发的活动。您也可以从 Explorer 面板的 Selected Objects 选项卡中拖出 Fork 活动。 |
7. | 在 Process Editor 中,单击 Explorer 面板中的 Available Objects 选项卡。从 EXPENSE_WH 目标模块中,将 REL_CATEGORY_MAP 映射拖到画布中。 |
8. | 在 Explorer 面板中,确保选中了 Available Objects 选项卡。将 REL_TIME_MAP 映射拖到画布中。 您可以在画布上看到两个映射活动,即 REL_TIME_MAP 和 REL_CATEGORY_MAP。重新排列映射活动,使它们垂直位于 START 活动的右侧。 注:在画布上放置映射活动时,如果您看到“Unable to determine if the map is a PLSQL or SQLLDR map........”错误,请在 Design Center 中右键单击相应的映射,并选择 Configure。在 Configuration Properties 窗口中,为 Language 属性选择 PL/SQL。 |
9. | 从 Palette 面板中,将 AND 活动拖到画布中,使其位于 REL_TIME_MAP 和 REL_CATEGORY_MAP 映射活动的右侧。 |
10. | 在 Explorer 面板中,确保选中了 Available Objects 选项卡。将 REL_EXPENSE_MAP 映射活动拖到画布中。 重新排列 REL_EXPENSE_MAP,使其位于 AND 活动的右侧。 |
11. | 从 Palette 面板中,将 END with ERRORS 活动拖到画布中。将其拖放到 REL_EXPENSE_MAP 多维数据集映射的右侧,并位于 END_SUCCESS 活动的上方。 |
12. | 从 Palette 面板中,将 END with WARNINGS 活动拖到画布中。将其拖放到 REL_EXPENSE_MAP 映射活动的右侧,并位于 END_SUCCESS 活动的下方。该过程如以下屏幕截图所示。 现在,您将学习如何连接活动。 |
13. | 将您的光标放在 Start 活动上。确保光标变为 ()。拖放一条从 Start 活动到 Fork 活动的线(从这里开始,将这些线称为转换)。 注:使用转换指示活动在进程流中的发生顺序和条件。您可以使用转换基于前一活动的完成状态执行活动。 要拖动转换,鼠标指针必须变为 ()。
使用转换链接所有活动之后,进程流将如以下屏幕截图所示。 您在上述步骤中了解并添加的转换是无条件转换。默认情况下,转换都是无条件的。在前一活动完成后,进程流将继续,不管之前活动的结束状态是什么。 注:当您拖放从一个活动到另一个活动的转换时,可能会出现某些无效字符,如 <0> 和 <1>。您可以忽略它们,因为它们不会在部署或执行期间导致任何问题。 |
14. | 您可以使用转换基于前一活动的完成状态执行活动。现在,您将学习如何将条件应用到转换。 选择从 REL_EXPENSE_MAP 映射活动到 END_SUCCESS 活动的转换(连接线)。 注:在 Object Details 面板中,转换名称无关紧要。在下面的屏幕截图中,转换名为 Transition_6。您工作环境中的转换名称可以不同于屏幕截图中的名称;您的工作环境可能会使用诸如 Transition_7 或 Transition_9 之类的名称。名称不同没有关系。 |
15. | 再次确保选中 REL_EXPENSE_MAP 映射活动与 END_SUCCESS 之间的转换(连接线)。 在 Object Details 面板中,单击 Condition 属性旁边的字段。单击右侧的 按钮。此时显示 Transition Condition Editor。在 Transition Condition Editor 中,选择 Enumerated Conditions 选项按钮。从下拉列表中,选择 SUCCESS。单击 OK。 |
16. | 选择 REL_EXPENSE_MAP 映射活动与 END_ERROR 活动之间的转换。该转换将突出显示。 在 Object Details 面板中,单击 Condition 属性旁边的字段。单击 按钮。此时显示 Transition Condition Editor。在 Transition Condition Editor 中,选择 Enumerated Conditions 选项按钮。从下拉列表中,选择 ERROR。单击 OK。 这表示,如果前一活动 (REL_EXPENSE_MAP) 在结束时出现错误,进程流仍将继续。 |
17. | 选择 REL_EXPENSE_MAP 映射活动与 END_WARNING 活动之间的转换。 在 Object Details 面板中,单击 Condition 属性旁边的字段。单击 按钮。在 Transition Condition Editor 中,选择 Enumerated Conditions 选项按钮。从下拉列表中,选择 WARNING。单击 OK。 来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/1384/viewspace-224915/,如需转载,请注明出处,否则将追究法律责任。
上一篇: Oracle Warehouse Builder 11g 入门之加载目标仓库
下一篇: 【楼方鑫】Log Miner恢复的误区
请登录后发表评论 登录
全部评论
<%=items[i].createtime%>
<%=items[i].content%> <%if(items[i].items.items.length) { %>
<%for(var j=0;j
<%}%> <%}%>
<%=items[i].items.items[j].createtime%>
<%=items[i].items.items[j].username%> 回复 <%=items[i].items.items[j].tousername%>: <%=items[i].items.items[j].content%>
还有<%=items[i].items.total-5%>条评论
) data-count=1 data-flag=true>点击查看
<%}%>
最新文章
|
转载于:http://blog.itpub.net/1384/viewspace-224915/