Oracle Warehouse Builder 11g 教程 Part 3
本系列教程翻译自OTN官方文档,为OWB的系列教程,全教程共12篇文章,我只介绍启中5篇,主要是想通过此教程向大家介绍OWB工具的的基本使用方法和数据仓库建模方法,由于水品有限,只能大体上保证翻译的通顺,如有任何不足之处请参考官方OTN文档.,文中很多英文词汇未翻译主要是为了配合截图
这系列文章也同时发表在itpub 上:
http://tech.it168.com/d/2007-12-28/200712271916501.shtml
http://tech.it168.com/d/2008-02-15/200802141542372.shtml
http://tech.it168.com/d/2008-02-27/200802271433072.shtml
转载注明出处 http://www.gemini5201314.net
原教程索引: http://www.oracle.com/technology/obe/11gr1_owb/index.htm
原教程列表如下:
1. Starting::
1 Starting with Oracle Warehouse Builder 11g Release 1 1
2 Working with Flat File Transactional Data
3 Designing the Relational Target Warehouse 5
4 Designing ETL Data Flow Mappings
5 Deploying Objects in the Target Warehouse
6 Loading the Target Warehouse
2. Extending:
1 Setting Up the Oracle Warehouse Builder Project 2
2 Examining Source Data Using Data Profiling 4
3 Matching and Merging Records
4 Extracting, Transforming and Loading Data 3
5 Modeling the Target Schema
6 Using Experts to Automate Warehouse Builder Tasks
只翻译其中5章,顺序如列表所示,本文所有图片来至OTN.,部分专业词汇尽量附上原英文单词.对于与程序有关的词汇尽量不翻译并给出原英文单词.,一些截图中的按钮部分单词也尽量是原文。
数据抽取、转换、装载
目的
这节课程的目的是向你展示如何定义一个简单的ETL 映射(Mapping)过程,并且展示如何处理用户自定义对象。这节课程,你也会看到如何定义一个简单的过程流 ( Process flow )
注意:屏幕截图可能会有所不同,这取决于你将要进行的其他课程,如果你看到与你自己设置不相关的地方忽略它就是了。
这节课程的脚本只能用于OWB 11gR1 ,OWB前面版本的课程你可以在OTN 上找到。
主题
这节课程包含如下主题
总览
先决条件
定义一个简单的ETL 映射
在ETL 映射里使用用户自定义对象
定义一个简单的过程流
总结
译者注:本文将不翻译在ETL映射里使用自定义对象,相关章节请参考OTN上原文
总览
ETL 是Extract (抽取), Transform (转换) 和 Load (加载) 数据的简写,它是把你的数据从数据源转换成目标数据仓库的过程,在这系列的课程里“建立OWB 项目”,你学习了如何定义一个OWB 模块来连接你的数据源或者目标数据库,现在,你将学习如何移动和转换数据的逻辑。
这节教程先使用映射编辑器来创建一个简单的映射,OWB可以用来创建大型复杂的映射,增加生产力和减少错误。
先觉条件
在开始这节课程之前,你应该:
1. 完成前面的 “建立Oracle Warehouse Builder 项目”
注意:你必须完成前面的安装Oracle Workflow Server 并配置好它。
同样,你必须完成前面课程提到的 “导入OE 模块的元数据” ,
2. 登录到SQL Plus 环境运行grant_priv_sql 脚本
grant_priv.sql 脚本赋予OE和 HR 的一些表select 权限,这些表将会用来当作你映射的数据源
用sys登录到SQL*Plus ,从你下载的文件解压目录下运行grant_priv.sql 脚本,你应该在SQL 提示符下输入如下命令:
@c:\owbdemo_files\grant_priv.sql ;
定义一个简单的ETL映射
在这节主题中,你将创建一个基本的映射来理解Oracle Warehouse Builder 是如何来进行ETL 设计工作的。你将使用Oracle 自带的样本数据OE 模式作为数据源,并把它转换到DP_TGT 目标模块去。
在这个主题中,你将执行以下步骤:
创建一个简单的ETL映射
部署和映射相关的对象
执行映射
查看装载的数据 CONS_ORDERS 表
创建一个简单的ETL映射
为了创建一个简单的ETL映射,执行以下步骤:
1. 假设你用owb 用户登录到Design Center ,在Project Explorer 面板里,展开HANDSON > Databases > Oracle >DP_TGT . 右键选择Mapping 并选择New
图1
Create Mapping 窗口出现
2. 在Create Mapping 窗口,输入SIMPLE_MAP 作为映射的名字,单击OK
图2
Mapping Editor 启动了SIMPLE_MAP 的映射
3. 你可以从左边的Explorer 面板里面添加已经存在的数据源或者目标数据
在Explorer 面板里面,确保Available Objects 选项卡被选中了,展开Oracle > OE > Tables ,把ORDERS 拖到中间的画布上。
同样的,把ORDER_ITEMS 拖到画布上。
图3
4. 从左下角的调色盘,把JOINER操作拖到画布上,把它放在前面两个表的右边,点击
图标让每一个操作都最大化
图4
5. 中间的连接线显示了数据源是如何通过操作符变成目标数据的。
从ORDERS.INOUTGRP1 拖一条线到JOINER.INGRP1
图5
6. 从ORDER_ITEMS.INOUTGRP1 拖一条线到JOINER.INGRP2
图6
注意观察数据源的属性作为输入属性被添加到了JOINER 操作里面
7. 在映射画板里,单击JOINER 操作的顶部来高亮显示它。
在左边的Joiner Properties 面板里面,检查Join Condition 属性。
图7
点击 编辑图标
来查看完整的连接条件,在表达式构建器 (Expression Builder)窗口,有如下连接条件:
INGRP2.ORDER_ID = INGRP1.ORDER_ID. Oracle Warehouse Builder 用两个表之间的约束来建立连接条件,单击OK
图8
8. 在Palette ,拖动Table Operator 到画布上,把它放到JOINER 操作的右边。
图9
然后会出现一个Add Table Operator 窗口
9. 在Add Table Operator 窗口里,选择 “Create unbound operator with no attribute”.在新操作名字上输入CONS_ORDERS ,单击OK.
图10
10. 从JOINER.OUTGRP1到CONS_ORDERS.INOUTGRP1拖一条线,最大化CONS_ORDERS操作符并确保它是高亮着的。
图11
11. 在Table Operator Properties 面板里,对于Loading Type 的值,选择TRUNCATE/INSERT,如果你打算插入或者更新,你可以简单的选择INSERT/UPDATE ,Oracle Warehouse Builder 会自动的产生Merge 语句。
图12
12. CONS_ORDERS 表仍然不存在与repository 里面,右键单击CONS_ORDERS 表操作符的头部然后选择Create and Bind
图13
在Create and Bind 窗口,检查它的细节,然后点击OK,从Mapping 菜单里面选择Close 关闭映射编辑器
图14
13. 在DP_TGT ,展开Tables, 双击CONS_ORDERS.
图15
在Object Editor 里面检查表的详细信息,从Diagram 菜单里面选择Close Window 来关闭Object Editor
图16
注意:你可以直接从mapping editor 里面得到这个表而不是手工创建它,这可以提高你的工作效率并节省你的时间
从Design 菜单里选择Save All 来保存你所做的更改。
部署和映射相关的对象。
部署是从逻辑设计模型里面创建真正的目标数据库对象,当你部署ETL映射的时候,部署过程会产生PL/SQL代码,你需要直接执行这些代码来运行ETL过程,你也同样需要部署和映射有关的对象。
为了完成SIMPLE_MAP的映射部署,执行以下步骤
1. 为了部署对象,你必须启动Control Center Manager ,从Tools 菜单里面选择Control Center Manager.
图17
2. 单击DP_TGT_LOCATIONI ,在Object Details 面板里,观察你自己创建的两个对象,SIMPLE_MAP 和CONS_ORDERS , Design Status 是New , Deploy Status 是Not Deployed
图18
3. 单击Default Actions 来把Deploy Action 从None 改成Create.
图19
当你在这系列课程里执行其他的操作的时候会创建很多其他的对象,它们都是在DP_TGT_LOCATION 下面,为了选中SIMPLE_MAP和CONS_ORDERS 这两个对象,展开DP_TGT_LOCATION > DP_TGT
展开Tables ,展开Mappings ,按住ctrl 键不放然后选中这两个对象并且点击Default Action 按钮,如图所示
图20
4. 从File 菜单里选择Deploy > To Control Center
图21
你可以在Control Center Jobs 面板里面监控整个部署的过程。
在Control Center Jobs 面板里面。Deployment status 会从 “generate” 到 “run” 到 “completed successfully”. 映射被成功部署后就可以执行了。
为了能够查看映射生成的代码,在Control Center Job 面板里双击HANDSON job
注意:你肯定会看到很多个任务在执行因为你可能完成了其他课程的任务,如果你在窗口里看到多个任务,检查Finished 列来查看日期和时间以确定最后一个任务
图22
4. 在Job Details 对话框里,选择Script 选项卡
5. 注意到Oracle Warehouse Builder 产生了一个 .pls (PL/SQL) 的代码来部署映射,如果你想看SIMPLE_MAP的代码的话,你可以点击View Code
图23
向下拖动窗口来查看产生的代码,从Code 菜单里面选择Close . 然后在Job Details 窗口里面从File 菜单点击Close 来退出
图24
执行映射
你已经学习了当你部署映射的时候Oracle Warehouse Builder 会产生一段 .pls 的代码。你现在需要真正执行那段代码来完成映射任务。
SIMPLE_MAP 是通过从OE.ORDERS 和 OE.ORDER_ITEMS 表加一个连接条件来选择数据的,我们使用JOINER 操作来加载CONS_ORDERS 表。
为了执行映射,你需要执行下列步骤:
1. 假设你还没有退出Control Center,展开DP_TGT_LOCATION > DP_TGT > Mappings 然后选择SIMPLE_MAP
图25
2. 从File 菜单里面选择Start
图26
当你点Start 的时候,Control Center Jobs 面板会转换到Execution 选项卡,你可以在这个面板里监控任务的执行
为了查看执行的详细信息,在Control Center Jobs 面板里面的Jobs 列双击SIMPLE_MAP
图27
3. 在Job Details : SIMPLE_MAP 对话框,单击Execution Results 选项卡来监控Row Activity
你可以查看有多少行被插入到目标数据库表里面去了,从 File 菜单选择Job Details : SIMPLE_MAP 对话框,然后选择Close , 从Control Center 的File 菜单里选择Close 来退出
图28
查看CONS_ORDERS 表里面加载的数据
为了检查我们刚才执行ETL映射的结果,我们查看CONS_ORDERS 表里面的数据,执行以下步骤:
1. 在Project Explorer 面板里,在DP_TGT展开Tables ,双击CONS_ORDERS 并选择Data
图29
2. 在Relational Data Viewer : CONS_ORDERS里面,向下滚动来检查数据,从Object 菜单选择Close Window 来退出Data Viewer
图30
译者注:这里跳过在ETL映射中使用自定义数据库对象。
定义一个简单的过程流(Process Flow)
在Oracle Warehouse Builder 里面,一个过程流是用来管理一组映射和它相关的活动的,比如用FTP上传文件到数据仓库的机器上或者发生转换错误的时候通知管理员。使用过程流你可以定义一个映射的序列让这些映射以前面产生的结果来选择不同的处理方式比如当执行映射的时候失败了要发email 通知管理员。Oracle Warehouse Builder 同样能够定时执行过程流。
在Process Flow Editor 里面定义了一组活动用来添加转化和设计流程的。一个活动是过程流的一个工作单元,这些工作单元可以在Oracle Warehouse Builder 里面或着外面执行。转换显示了这些活动的顺序和条件。
在这节主题中,你将执行以下任务:
创建一个过程流的模块和包
设计一个过程流
部署和执行这个过程流
创建过程流的模块和包
在你开始设计过程流之前,你需要创建一个模块来包含过程流,过程流模块包含过程流包(Process Flow Package), 过程流包是用来相互关联过程流的,在运行时,你可以运行一个过程流来调用在同一个包下的其他过程流。
在这个主题里面,你将会创建一个过程流模块叫做PFLOWS ,一个过程流包叫做L_MAPS ,一个过程流模块是一个过程流的容器让你来验证,产生,部署一组过程流。
为了创建过程流模块和包,执行以下步骤:
1. 在Project Explorer ,展开HANDSON > Process Flows ,右键单击Process Flow Modules 并且选择New ,
Create Modules 向导出现,点击Next 来跳过欢迎页面。
图31
2. 在Name and Description 页面,输入PFLOWS 作为过程流模块的名字,单击Next
图32
3 现在你可以创建一个Oracle Workflow Location 叫PFLOWS
注意:你定义的Oracle Workflow Location 是你想把过程流放置的地方,Oracle Workflow Location 应该指向workflow 模式 ( OWF_MGR) ,你应该在前面的课程里面已经完成了Oracle Workflow 的安装和配置。
在Connection Information 页面,查看Oracle Warehouse Builder 已经创建了一个默认的位置:PFLOWS_LOCATION1 , 点击Edit 按钮来指定详细workflow 位置。
图33
在Edit Oracle Workflow Location 窗口,把原来的PFLOWS_LOCATIN1 改成 PFLOWS_LOCATION (删掉后面的 1 )。
这节课程使用owf_mgr 作为模式名和密码,如果你的Oracle Workflow 模式使用的是不同的名字和密码,把相应的部分替换掉,注意Workflow 用户要解锁.
把下列信息作为workflow 的位置信息:
Name: PFLOWS_LOCATION
Password: owf_mgr
Host Name : 你的ip 或者机器名
Port Number: 1521
Service Name : orcl 或你自己数据库的Service Name
Schema: owf_mgr
Version: 2.6.4
点击Test Connection 来测试连接的正确性,如果成功,点击OK ,如果不成功,检查连接的详细信息并重试一遍,点击OK , 点击Next 。在Summary 页面,检查详细信息,然后点 Finish
图34
4在Create Process Flow Package 页面,输入L_MAPS 作为名字,点击OK
图35
5. Create Process Flow 窗口出现,输入LOAD_PF 作为过程流的名字
图36
点击OK
Oracle Warehouse Builder 启动了过程流编辑器,一个Start 和 End 活动已经在上面了。
图37
下个主题中,你可以学习到如何用活动和转换来设计过程流
设计过程流
为了设计一个过程流,执行以下步骤:
1. 在Process Editor 里面,从Palette(调色板面板)里面拖动一个 (交叉) Fork 活动到画布上,你可以用Fork 活动来启动一个多选择的,并发的活动,你也可以从Explorer 面板里的Selected Objects 选项卡里拖动Fork 到画布上
图38
2. 在Process Editor 里面的Explorer 面板下,点击Available Objects 选项卡,展开DP_TGT 并且拖动SIMPLE_MAP mapping 到画布上,把它放在Fork 活动的右上角。
图39
3在Explorer 面板里,确定Available Objects 选项卡选中了,从DP_TGT 拖动MAP_CUSTOMERS 映射到画布上。
图40
译者注:MAP_CUSTOMERS 映射是省略掉的用户自定义对象里面创建的映射,你可以不用管它。
4. 从左边的Palette面板拖一个AND 操作到画布上,在SIMPLE_MAP 和MAP_CUSTOMERS活动右边。
图41
5 把你的鼠标放在Start 上,确保鼠标箭头变成了 (
),从Start 拖一条线到Fork 活动上(这些线在这里代表转换)
从Start1 拖一条线到FORK 活动。
从FORK 活动拖一条线到SIMPLE_MAP
从FORK活动拖一条线到MAP_CUSTOMERS
从SIMPLE_MAP拖一条线到 AND1 活动
从MAP_CUSTOMER拖一条线到 AND1 活动。
从 AND1 拖一条线到END_SUCCESS活动。
点击Progress Editor 工具栏的AutoLayout(
)
当你连接了所有的转换后,整个过程流应该像如下图所示
图42
6 完成过程流的设计
从Process Flow 菜单里选择Generate 来生成LOAD_PF 过程流,生成的过程流代码是一个标准的XML 格式的过程定义语言(XPDL XML Process Definition Language)
从Process Flow 菜单选择Close 来关闭process editor.
在Design Center, 点击Save All .
图43
Deploying and Executing the Process Flow
为了完成过程流的执行和部署过程,完成以下步骤
1. 在Tools 菜单里,选择Control Center Manager ,在Control Center 里展开PFLOWS_LOCATION > PFLOWS 。选择PFLOWS.
在Object Details 面板里,选择L_MAPS 包,把Design Status 设成New ,点击Default Action 把Deploy Action 设成Create.
图44
注意:你部署的是过程流包而不是过程流,然而你执行的是过程流。
2. 在File 菜单里选择Deploy > To Control Center
图45
过程流包L_MAPS 被成功部署了
图46
2. 展开L_MAPS 并选择LOAD_PF .
从Start 菜单选择File ,或点击工具栏上的Start 按钮
图47
4. 查看执行的详细信息,双击LOAD_PF
图48
在LOAD_PF 对话框里,点击Execution Results 选项卡查看Row Activity ,你可以看到有多少行被插入,更新,删除,合并了。
从Job Details 窗口的File 菜单里选择Close ,然后从Control Center Manager 的File 菜单选择Close 来退出。
图49
LOAD_PF 过程流(一个非常简单的例子)定义了两个并行执行的任务,除非两个都执行完了才继续,记住你在Loading Type 属性里选择的目标表是TRUNCATE/INSERT ,所以执行这个过程流的时候,OWB 会先截断这个表然后再重新加载两个目标数据库表,CONS_ORDERS 和 SCALAR_CUST
你可以设计更复杂的过程流,根据执行的结果来循环,你也可以根据一定的条件,错误,或者更复杂的发送邮件的错误处理过程来定义你自己的分支。
总结
在这节课中,你应该学会了以下内容
创建,部署,执行一个简单的ETL映射
创建,部署,执行了一个使用了自定义数据库对象的ETL映射(省略了)
创建,部署,执行一个简单的过程流。