http://www.gemini5201314.net/category/etl/page/2
Oracle Warehouse Builder 11g 教程 Part 5
本系列教程翻译自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.,部分专业词汇尽量附上原英文单词.对于与程序有关的词汇尽量不翻译并给出原英文单词.,一些截图中的按钮部分单词也尽量是原文。
设计关系型目标数据库
http://www.gemini5201314.net
目的
用Oracle Warehouse Builder 来设计关系型数据库(从3范式到维度)模式可以让你的数据仓库发挥最大作用,同样的,你可以设计一个多维数据库来提供更高要求的分析需要。
在这节课中,你会建立一个小型的立方体包含两个维,这个数据仓库的原数据是文本文件
注意:这节课中的脚本只在OWB11g中有效。
主题
这节课包含如下主题
总览
先决条件
定义一个目标数据仓库模块 (略过)
创建一个外部表 (略过)
设计一个维
设计一个立方体
总结
总览
OWB 提供高级的关系型和维度型建模能力,它让你定义关系型对象比如表,试图,物化视图,序列,外部表,和维度目标对象比如维度和立方体。
OWB 把维度的设计和实现直接分开,对于维度对象你可以只点击一个按钮来选择一个关系型实现或一个多维的实现方式,因此,同样的维度对象可以是现成一个关系型数据仓库或者一个多维数据仓库(在OLAP中实现)。
在这节课中,你将设计一个维度模型来实现一个关系型目标数据仓库,对于关系型建模,OWB 同时支持设计和实现 星型模型和雪花模型
你同时会设计实现一个简单的星形模型包含一个立方体引用两个维的外键
先决条件
在开始这篇课程之前,你应该
1. 下载owbdemo_files.zip 文件,解压缩到你的硬盘上
2. 完成课程1 和 2 ,并用rep_owner / rep_owner 登录
设计维
维是星形模型最重要的数据组织方式,一些通用的维度信息如客户,产品和时间。
一个维度包含一组层级(Level) ,一组层级关系(hierarchies),定义这些层级,用户总是使用这些已知的层级关系来下钻数据,查询的性能提升是因为查询优化器知道该如何选择那些数据可用。
为了创建一个维,你必须定义如下信息:
维属性 ( Dimension Attributes)
层级 (Levels)
层级属性 (Level Attributes)
层级关系 (Hierarchies)
在这节课程里,你必须执行以下步骤:
在Data Object Editor 里面检查预定义的PRODUCTS 维。
使用时间维向导创建REL_TIME 维
使用向导创建REL_CATEGORY 维
在Data Object Editor 里面检查预定义的产品信息。
这节主题介绍一个维的示例,在创建一个维之前你可以查看已经存在的维来理解维的基本设计方式。
1. 在Project Explorer 面板里,展开OWB_DEMO > Databases > Oracle ,展开SALES_WH, 然后展开Dimension .右键点击打开PRODUCTS 然后选Open Editor.
注意:你也可以双击打开PRODUCTS
图1
启动Data Object Editor ,Data Object Editor 是一个单用户界面让你容易的设计,创建,管理多种数据库或维对象,Data Object Editor 是你使用图形(diagrams)和属性栏(property sheet) 来建立和修改各种数据模式的中心位置。界面应该如下图所示:
图2
2. 为了查看维属性,在Dimension Details 面板里点击Attributes 选项卡
注意维度有一个序列,PROD_DIM_SEQ ,这个序列是在装载数据的时候用的。
同样的,ID 属性被定义成了一个代理主键( Surrogate) 而SOUCE_ID 属性被定义成了业务主键(Business Key)
注意:维的主键列是维的主键并在每一个层级上使用代理主键的方式实现,使用序列的方式,你可以用唯一值来填满维的主键。
译者注:这句话有点绕口,因为维可以有两个理论上的主键,一个是代理主键,一个是业务主键,所以我们把其中的代理主键设成主键,但你也可以不设,只要保证值的唯一性就可以了,使用SEQUENCE 是一个简单的方法。注意下面的那张图
一个代理主键从序列装载数据的时候定义了每一个记录在所有层级上的唯一性,这是在维的主要字段指定的
一个业务主键定义了总是从数据源来的自然主键。
一个父标识符在你想使用基于值的层级关系时可用。
在Descriptor 列,维属性被标记成Long Description 和 Short Description ,他们被用来在business intelligence tools (一个oracle 的工具)里面显示成员属性
点击Name 列,添加两个时间属性,VALID_FROM_DATE 和 VALID_TO_DATE ,详细信息如下图。
图3
3. 为了查看维的层级和层级属性,在Dimension Details 面板里点击Levels 选项卡来查看。注意其中有四个层级并且每个层级都有一组合适的属性,比如PRODUCT 层实现了所有的层级属性除了前面你定义的两个属性
为了使这两个时间字段适用与PRODUCT层级,点击Applicable 复选框:VALID_FROM_DATE 和 VALID_TO_DATE 属性,如下图所示
注意:一个层级并不需要实现所有的属性,在每个层级上保存这个层级的信息可以使你在一个层级上实现一个层级的维属性。(原文: A level is not required to implement all dimension attributes. Implementing a dimension attribute on a level enables you to store this information on a level.)
译者注:这句话翻译起来有点绕口,作者的意思大概是这样的:比如我们有一个地区 > 产品 的两级维,我们地区的所有属性比如地区主键,地区代号,地区名字,地区描述都可以传给下一个层级产品,而我们的产品可以有两个地区属性:一个是生产地,一个是销售地,甚至还可以包括消费者居住地地区信息,但是我们在实现产品这个维的时候,我们并不需要实现所有维信息尤其是当前维所继承的一些属性(这些属性比较不唯一),换句话说就是数据粒度的问题,我们在实现比较细粒度的维属性时不要包括了上层的粗粒度维信息
4. 在关系型实现里面,一个层级属性就是一个表的一列,层级属性并没有维属性相同的名字,不过OWB可以默认设置这个。
当你定义了层级属性的时候不要担心它们的顺序,这些层级只会被层级关系排序。
图4
为了查看层级信息,在Dimension Details 面板里面点击Hierarchies 选项卡,注意到里面只有一个层级关系,PROD_STD ,它的层级如下图所示的排序(从上到下的关系)
默认的Default 单选框可以在用户查询的时候使用你指定默认的层级关系,所以选择最常用的层级关系非常重要。
图5
5. 当你定义一个维的时候,你也可以定义缓慢增长维的策略
缓慢增长维(Slowly Changing Dimensions) 决定了你如何储存你的维的历史信息,你可以选择如图所示的三种策略
点击SCD 选项卡来决定PRODUCT维的SCD策略
图6
注意:Type 2 和Type 3 的SCD只在Enterprise ETL 选项里才有(当你只有Core ETL 功能的时候,SCD 里面只有Type 1可选,如果你只使用Core ETL功能并且你不打算执行这一步,你可以跳过下列操作),这个步骤只是检查一些信息,并没有和后面的步骤有联系。
如果你想保存完整的历史变化信息,选择Type 2 实现,点击Type2 : Store the complete change history
注意到Settings 按钮被激活了,点击Settings.
在Type2 slowly changing dimension 对话框中,在Recording History 下拉列表中,选择你需要的属性:
Trigger History (触发记录历史信息):选择这个选项让你在创建一个新的记录的时候记录历史信息
Effective Date (有效时间起):选择这个选项可以让你记录一条记录开始活动的时间或日期
Expiration Date(失效日期)::这个选项可以记录一条记录失效的时间或日期
比如,你想当LIST_PRICE , NAME ,PACK_SIZE 其中任何一个变化的时候记录它的历史信息,把它们设置成Trigger History 属性,如下图所示,同样的,VALID_FROM_DATE 指定到Effective Date , VALID_TO_DATE指定到Expiration Date 属性。
图7
在Type2 slowly changing policy 对话框里面点击Close 来关闭它
6. 你用OWB来设计一个维对象然后把它们部署到一个关系型数据库或者多维数据库,
在Storage 选项卡页面,你可以自己决定是把它们用关系型方法实现还是多维型方法实现。OWB会自动产生合适的代码
点击Storage 选项卡来查看PRODUCT维的实现方式,对于一个关系型实现,你可以选择 星形模型,雪花模型,或者手工方式。
图8
Data Object Editor 同样提供给你查看维里面数据的工具:Data Viewer
从Diagram 菜单,选择Close Window 来退出Data Object Editor
在下面的步骤中,你将要创建两个简单的跟EXPENSES相关的维,你可以在Data Object Editor 里面创建,但是在这节课中,我们将选择使用向导的方式创建维,这将提供给你一些默认值并使你通过简单的易于理解的方式创建维
使用时间维创建向导创建REL_TIME 维
时间维被广泛的应用于数据仓库中当作时间系列,比如季度(这个季度的花费和上年同季度的花费比如何)
时间维也由一组层级和定义这些层级的层级关系组成,你可以使用OWB创建财政时间维或者日历时间维
OWB可以使你不仅创建时间维而且可以预填充时间维,当你使用向导创建时间维的时候,OWB自动的创建了映射并填充了数据
同样的,这些装入的数据符合时间维的OLAP标准属性
现在,你使用时间维向导来创建REL_TIME时间维
1. 你先前检查了SALES_WH 模块,现在,展开EXPENSE_WH ,右键点击Dimensions 并选择 New >Using Time Wizard
图9
2. 在Name and Description 页面,输入REL_TIME作为时间维的名字,点击Next
图10
3. 在Storage 页面,选择ROLAP : Relational storage 作为维的实现方式
图11
4. 在Data Generation 页面,你选择创建时间的范围,这个信息用来产生预定义的映射并填充时间维,在这个映射里,你输入的值将作为一个参数,这个映射将在最后一步得到
对于Start Year , 输入2003并输入3作为Number of years ,确定Calendar 被选中, 如下图
注意:在时间维里面的层级关系定义了一组相临近的层级之间的层级关系,一个时间维可以有一个或多个层级关系,每一个层级关系必须指定是财政层级或日历层级
如果时间维由财政数据组成,你必须指定start month 和财政年的日期和财政周开始的日期,你也需要指定月和季度的边界,可以是445或544
图12
点击Next
5. 在Levels页面,选择Normal Hierarchy并选择:Calendar Year, Calendar Quarter, Calendar Month 和Day,点击Next
图13
6. 在Pre Creates Settings 页面,检查详细信息并Next
图14
一个进度对话框显示了向导创建必要对象的进度
图15
在成功完成后,点击Next ,在Summary 页面,检查一遍详细信息并点Finish
注意到向导创建了四个必要的对象,REL_TIME维对象,REL_TIME_SEQ序列用来产生代理主键的,REL_TIME表用来支持时间维的物理存储方式的,还有最重要的REL_TIME_MAP对象来产生时间维映射的
图16
如果你好奇REL_TIME_MAP对象长什么样子,双击REL_TIME_MAP启动Mapping Editor
从View 菜单,选择Auto Layout,你可以看到扩展后的映射,你可以上下移动或放大缩小来查看这个映射,OWB自动创建这个映射来提高你的效率和节省时间
图17
你已经完成了创建REL_TIME时间维,下一步,你将要创建REL_CATEGORY维
使用向导创建REL_CATEGORY维
1. 在EXPENSE_WH模块中,右键点击Dimension ,选择New > Using Wizard
图18
2. 在Name and Description 页面,输入REL_CATEGORY作为维的名字,点击Next
图19
3. 在Storage Type 页面,选择ROLAP : Relational Storage 来指定维的实现方式,点击Next
图20
4. 在Dimension Attributes 页面,你找到预定义的列,ID,NAME,和DESCRIPTION,注意对于ID属性选择Surrogate (代理主键),对于Name属性选择Business
你可以随你喜欢改变这些值,但你必须有一个代理主键和业务主键,代理主键标识符必须是数字类型
对于NAME属性,把Length变成30,点击Next
图21
5. 在Levels页面,输入下面层级信息作为维的默认层级关系
CATEGORY (Description: Accounting Category)
TYPE (Description: As entered on Expense Report)
图22
6. 在Level Attributes页面,对于每一个你定义的层级,你选择维属性应用到那一层,接受默认选择并点击Next
图23
7. 在SCD页面,保持默认的SCD选项选中,点击Next
图24
如果你有其他要求,OWB默认实现最低层级的层级关系并创建时间属性(VALID_DATE 和 EXPIRED_DATE)
在Pre Create Settings 页面,点击Next ,维创建进度条出现,成功完成后,选择Next,点击Finish 关闭Summary 页面
注意到REL_CATEGORY已经被添加到了EXPENSE_WH目标模块,对于维,OWB会默认创建一个表用星型模型来实现并且也会创建一个序列来填充ID 列
图25
设计立方体
立方体包含到一个或多个维的连接,立方体的轴包含维的值,立方体的身体包含度量值,大多数度量都是数字类型并且可加减,比如,销售数据可以组织成一个立方体包含时间,产品,和客户维并且身体包含度量值销售额和美元销售额
在一个关系实现中,一个立方体用外键约束连接到维表并且包含一组维,为了创建一个立方体,你必须定义下列对象
立方体度量(Cube Measures
立方体维度(Cube Dimensionality)
你执行以下步骤:
在Data Object Editor里面检查预定义的SALES立方体
使用向导创建REL_EXPENSE立方体
让我们先检查预定义的SALES立方体的度量和维度
在Data Object Editor里面检查预定义的SALES立方体
这个主题向你介绍一个实例立方体,通过查看一个已经存在的立方体,你可以理解设计一个立方体的基础,后面的主题中,你使用向导创建一个简单的立方体引用到expense 模块
1. 在Project Explorer 面板里,展开OWB_DEMO > Databases > Oracle ,展开SALES_WH , 然后展开Cubes ,右键点击Sales ,然后选择Open Editor.
注意:你也可以双击SALES
图26
2. 在Dimensional 面板里,向上或向下拖动来理解设计图,你将会看到SALES立方体连接到5个维:PRODUCTS , CHANNELS , CUSTOMERS , PROMOTIONS 和TIMES
图27
3. 在检查了SALES立方体后,在Cube Details 面板里点击Dimensions 选项卡,注意其中SALES立方体连接维的层级
比如,SALES 立方体引用了PRODUCTS 的PRODUCT层级,Role 列显示了一个下拉框,里面包括了一个我们选择的维所包含的维角色信息
图28
4. 为了检查SALES立方体的度量信息,点击Measures 选项卡,注意到三个度量都是数字类型,这些度量可以聚合产生总花费,数量,或一段时期或者一个特定的消费者或一个特定产品的销售数量
图29
5. 点击Aggregation 选项卡来定义每一个维的聚合方式
你选择聚合方式来聚合数据,你也可以对于每一个立方体所引用的维预计算这些度量,默认的集合方式是SUM
你必须指定下列值
Cube Aggregation Method: 选择聚合方式来聚合数据,默认的是SUM
Summary Refresh Method: 选择数据刷新方式,你可以选择ON DEMAND 或者ON COMMIT
Summary Strategy for Cube: 定义对于每一个维的层级的预计算方式
图30
6. 你可以实现一个关系型或者一个多维型实现,在关系型实现中,一个关系型表储存数据,当使用多维实现的时候,一个分析区(Analytic Workspace)储存数据
如果你想改变一个立方体的实现方式,点击Storage选项卡,你可以在关系型实现和多维型实现之间选择
对于关系型实现,你可以选择创建Bitmap index, 有这些索引可以提高查询时间的性能
图31
对于维,你可以用Date Viewer 来查看立方体的数据,从Design 菜单选择Close Window 来关闭Data Object Editor
使用向导创建一个REL_EXPENSE立方体
现在,你要创建一个简单的关系型立方体,REL_EXPENSE, 这个立方体引用两个前面已经创建的维:REL_TIME和REL_CATEGORY , 这个向导将帮助你使用简单的几步创建立方体
1. 前面你已经查看了SALES_WH模块,现在,切换到EXPENSE_WH模块,右键点击Cubes,然后选择New> Using Wizard.
图32
2. 在Name and Description 页面,输入REL_EXPENSE 作为立方体的名字,点击Next
图33
3. 在Storage Type 页面,选择ROLAP : Relational Storage 作为立方体的关系型实现,点击Next
图34
4. 在Dimensions 页面,你选择你的立方体要引用的维,从左边的Available Dimensions 展开EXPENSE_WH。选择EXPENSE_WH 点击 > 按钮移动到右边。点击Next
图35
5. 在Measures 页面,输入EXPENSE作为名字,点击Next
图36
在Summary 页面,查看cube 的详细信息,点击Finish
注意到REL_EXPENSE立方体被添加到了EXPENSE_WH模块的下面,在Data Object Editor 里面查看立方体,右击REL_EXPENSE并选择Open Editor 或者双击REL_EXPENSE 检查立方体,然后关闭Data Object Editor
图37
从Design 菜单选择Save All 来提交你的工作
图38
总结
在这节课程中,你设计了一个关系型星型模型立方体连接到两个维
这节课程中,你学会了
创建一个目标用户模式和模块
创建一个外部表指向两个简单的文本文件
使用向导创建维包括一个时间维
使用向导创建一个立方体
注意一点,你设计了维对象,这些实现对象与序列,或一些数据装载程序(映射)有关,但是这些对象并不存在物理的数据中,这是OWB提供最主要的功能来分开逻辑上的设计和物理上的实现
为了真正的创建目标数据库,你需要进一步部署这些维对象和立方体,你同样需要设计,部署和执行ETL映射来装载数据,把数据从关系型数据库或文本文件转换到我们想要的格式并最终把这些数据加载到维和立方体表中
ETL