本教程向您介绍如何在源操作符和目标操作符之间使用各种数据转换操作符来创建映射。
大约 1 个小时
本教程包括下列主题:
![]() |
概述 | |
![]() |
前提条件 | |
![]() |
在映射中使用联接、序号和转换操作符 | |
![]() |
||
![]() |
使用 Pivot 和 Unpivot 操作符 | |
![]() |
查看映射中的各种操作符 | |
![]() |
总结 |
将光标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注意:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。
映射是从源中提取数据、转换数据,然后将其加载到目标中这些操作的直观表示。映射定义了数据流以及对数据执行的操作。
映射中的设计元素是操作符。您使用操作符表示数据流中的源和目标。您还使用操作符定义如何将数据从源转换到目标。
本教程重点介绍可与源和目标操作符一起使用的一些转换操作符。
注意:本教程只关注对映射的设计,并不说明如何部署和执行映射。您的工作只限于设计时元数据这一级。
开始本教程之前,您应该:
1. |
已完成了标题为在映射中处理平面文件和 COBOL Copybook 源的教程。 |
2. |
已使用 etl_owner/etl_owner 作为用户名和口令登录到 Design Center。 |
您在本主题中创建的映射使用一个联接操作符来整合 Stg_Countries_Rec 和 Stg_Regions_Rec 这两个临时表中的数据(这两个表是在“在映射中处理平面文件和 COBOL Copybook 源”教程中创建的)。目标表是企业模型仓库模块中的 Geography 表。您将添加一个主键列 Country_WH_ID,并连接一个序号生成器使该列内容充当替代键。您还添加一个 sysdate 转换以填充 Load_Date 列。
注意: 作为源的表和文件一般具有字母数字记录标识符。构建仓库的步骤之一就是将这些标识符替换为简单的数字序号(称作替代仓库键)。这么做是有用的,因为可以简化为查询和分析而进行的表联接。在此映射中,您将添加一个主键列 Country_WH_ID,并连接一个序号生成器使该列内容充当替代键。
1. |
展开 ETL_PROJECT > Databases > Oracle > TRGT_ENTERPRISE_MODEL 模块。 右键单击 Mappings 并选择 New Mapping。输入 Map_Geography 作为映射名称。单击 OK。
|
||||||||||||||||||||||||||||||||||||||||||
2. |
在 Projects Navigator 面板中,展开 TRGT_STAGING > Tables。将 STG_COUNTRIES_REC 表拖到映射画布上。 同样,将 STG_REGIONS_REC 表拖到映射画布上。 |
||||||||||||||||||||||||||||||||||||||||||
3. |
从 Component Palette 中将一个 Joiner 操作符拖到这两个表操作符的右侧。 注意: 这个 Joiner 操作符将基数不同的不同源中的多个行集联接在一起生成一个输出行集。 只需一步即可将 Stg_Countries_Rec 中的所有列映射到 Joiner 中:单击 Stg_Countries_Rec 的 INOUTGRP1,然后将映射线拖到 Joiner 的 INGRP1 上。 以同样的方式将 Stg_Regions_Rec 中的所有列映射到 Joiner 操作符的 INGRP2 上。
默认情况下,join 操作符有两个输入组,如果需要,您还可以添加更多输入组。 |
||||||||||||||||||||||||||||||||||||||||||
4. |
在映射画布上,单击 Joiner 操作符选择它。您会看到 Property Inspector 面板中显示 Joiner 操作符的属性 (property)。 注意:如果您看不见 Property Inspector 面板,可在 View 菜单中选择 Property Inspector。 注意 Join Condition 属性。单击如下屏幕截图中高亮显示的省略号。
随即打开 Expression Builder 对话框。在 Inputs 选项卡中,展开 INGRP1 后双击 SUBREGION_NUMBER。此特性 (attribute) 出现在 Expression Builder 对话框右侧的 Join Condition 窗口中。 单击 Join Condition 窗口下方的等号 (=) 按钮。 展开 INGRP2,然后双击 SUBREGION_NUMBER。该联接条件现已完成。单击 OK 关闭对话框。
|
||||||||||||||||||||||||||||||||||||||||||
5. |
在 Projects Navigator 面板中,展开 TRGT_ENTERPRISE_MODEL > Tables。将 GEOGRAPHY 表拖到映射画布上。
|
||||||||||||||||||||||||||||||||||||||||||
6. |
将 Joiner 的 OUTGRP1 中的特性映射到 GEOGRAPHY 表特性。 注意:为了方便映射,单击 INGRP1 和 INGRP2 标签左侧的减号 (-) 折叠 Joiner 的 INGRP1 和 INGRP2。您还可以最小化这两个源表操作符 STG_REGIONS_REC 和 STG_COUNTRIES_REC。 要从 JOINER 输出组映射到 GEOGRAPHY 输入组,您还可以使用快速自动映射器,该映射器允许您复制特性,按名称或位置进行匹配。 将 Joiner 的 OUTGRP1 中以下特性映射到 GEOGRAPHY 表的 INOUTGRP1 中的相应特性:
注意:要在画布上创造空间,单击操作符标题栏上的 |
||||||||||||||||||||||||||||||||||||||||||
7. |
在 Projects Navigator 面板中,展开 TRGT_ENTERPRISE_MODEL > Sequences。将 SEQ_GEOGRAPHY 拖到映射画布上。 注意: 该序号操作符生成序号,这些序号随每行记录递增。
|
||||||||||||||||||||||||||||||||||||||||||
8. |
将 SEQ_GEOGRAPHY 中的 NEXTVAL 特性映射到 GEOGRAPHY 表中的 COUNTRY_WH_ID 特性。
|
||||||||||||||||||||||||||||||||||||||||||
9. |
在 Mapping Editor 画布中,单击 GEOGRAPHY 表操作符标题栏选择它。在 Property Inspector 面板中,展开 General。 将 Loading Type 属性的默认值 INSERT 更改为 UPDATE/INSERT。 注意:Warehouse Builder 支持可生成 PL/SQL 中的 MERGE 语句的 INSERT/UPDATE 和 UPDATE/INSERT 加载类型。合并通过以单个 DML 语句执行插入和更新而提高加载性能。 注意: 如果 Property Inspector 未打开或不可见,转到 View 菜单,单击 Property Inspector。
在 Property Inspector 面板中,展开 Conditional Loading。将 Match by constraint 属性设置为 No Constraint。单击 OK。 注意:No Constraints 值告诉 OWB 在进行匹配时不使用主键或唯一键信息。通过对表操作符的特性属性设置各种属性,用户可以指定任意、非键的匹配条件。
|
||||||||||||||||||||||||||||||||||||||||||
10. |
要更新 GEOGRAPHY 表中的数据(该表对替代键使用序号生成器),您必须更改 GEOGRAPHY 表的替代键和自然键特性的默认特性属性。 注意:由于序号生成器和主键一起用于生成替代仓库键,您可能会有如下疑问:如果不知道替代键的值是什么,又如何使用替代键来更新表呢?依据哪些列来进行匹配?如何防止更新用新的序号覆盖主键? 方法是使用自然键而不是替代键来进行匹配。为此,将自然键和替代键的“Match Column when Updating Row”特性属性分别设置为 Yes 和 No。 对于 GEOGRAPHY 表中的每个特性,单击该特性可在其 Property Inspector 面板中显示相关属性。展开 Loading Properties。用下表中的值来更改特性属性:
注意:如果您已选择了 GEOGRAPHY_UK 唯一键作为匹配的约束条件,在更改行信息时就不必指定匹配列了。 |
||||||||||||||||||||||||||||||||||||||||||
11. |
从 Component Palette 中,将 Transformation 操作符拖到映射画布上。 注意: Transformation 操作符使用一个 PL/SQL 函数或过程来转换一个行集中各行的特性值数据。 在 Add Transformation Operator 对话框中,接受默认选项“Select from existing repository objects and bind”。 展开 Public Transformations > Oracle > Pre-Defined > Date。选择 SYSDATE () return DATE。单击 OK。
将 SYSDATE 转换的 VALUE 特性映射到 GEOGRAPHY 映射表的 LOAD_DATE 特性。
映射现已完成。单击 Save All ( 接下来,您会看到一些重要属性,您可以使用这些属性进一步定制您的映射。 |
||||||||||||||||||||||||||||||||||||||||||
12. |
您可以启用 DML 错误记录特性。在映射画布中,选择 GEOGRAPHY 表操作符。 在 Property Inspector 面板中,展开 Error Table。 注意: 错误记录特性使得对 DML 语句的处理即使在语句执行过程中遇到错误仍可以继续进行。有关错误的详细信息(如错误代码)及相关的错误消息保存在一个错误表中。在 DML 操作完成后,您可以使用该错误表纠正含有错误的行,然后继续进行处理。支持对 INSERT、UPDATE、MERGE 和多表插入等 SQL 语句的 DML 错误记录。 该特性对于运行时间较长的 DML 语句批处理来说十分有用,例如,处理 1 百万条记录,其中有 10 条记录失败,利用 DML 错误记录特性,可以提交所有成功的记录,而将那 10 条错误记录行记录到一个错误表中。要使用 DML 错误记录,须在 Oracle Database 10g R2 或更高版本上创建目标模式。 要启用 DML 错误记录,用 DML Error table name 属性指定错误表的名称,如 GEOGRAPHY_ERR。注意,另外还有一个 Error table name 属性,它指定的表用于当数据规则已启用时记录下无效记录。 注意:“Error table name”属性只用于“逻辑错误”,包括孤立管理错误和数据规则违例错误。DML 错误表和逻辑错误表的格式不同,因而它们不能实际共享同一个表。 逻辑表的格式有几个额外的列,这些列的名称以“ERR$$$”打头。DML 错误表具有更长的 VARCHAR 类型的列,从而能够容纳目标列中放不下的过长的错误数据(这对于逻辑错误来说是不需要的)。 您还可以将 Truncate error table 属性设置为 Yes 以启用日常管理。
|
||||||||||||||||||||||||||||||||||||||||||
13. |
对于含有启用了 DML 错误记录的数据对象的映射来说,如果产生的错误数超过了为该映射指定的最大错误数,则该映射执行失败。 该最大错误数的默认设置为 50。您可以通过设置该映射的 Maximum number of errors 配置属性来更改此值。 在 Projects Navigator 面板中,右键单击 Map_Geography 并选择 Configure。
在 Configuration of MAP_GEOGRAPHY 面板中,展开 Runtime parameters。您可以将 Maximum number of errors 属性设置为一个合适的值。
您还可以将 Default audit level 属性设置为以下屏幕截图中显示的四个选项中的一个。默认情况下,该属性设置为了 ERROR DETAILS。
单击 Save All ( 关闭 Configuration of MAP_GEOGRAPHY 和 MAP_GEOGRAPHY 面板。 |
在本主题中,您将创建一个映射,该映射使用一个外部表(指向一个示例平面文件)作为源在目标数据中心中加载一个维度。CHANNELS 维度的数据取自 CHANNELS_EXT 外部表。外部表 CHANNELS_EXT 指向 File_Marketing_Channels.csv 平面文件。
外部表是一个只读表,与一个平面文件相关联。它以关系表的格式表示来自非关系源的数据,就好像您正在访问一个 Oracle 数据库表。通过使用外部表,您不必再使用平面文件临时表。
1. |
展开 TRGT_DATA_MARTS。右键单击 Mappings 并选择 New Mapping。输入 Map_Channels 作为该映射的名称。单击 OK。
|
||||||||||||||||||||||||||||
2. |
在 Projects Navigator 面板中,展开 TRGT_DATA_MARTS > External Tables。将 Channels_ext 拖到映射画布上。
|
||||||||||||||||||||||||||||
3. |
展开 TRGT_DATA_MARTS > Dimensions。将 Channels 拖到映射画布上。
展开 CHANNELS 维度,查看其所有特性。 |
||||||||||||||||||||||||||||
4. |
将外部表的特性映射到该维度的特性,如下表所示:
|
||||||||||||||||||||||||||||
5. |
从 Component Palette 中,将 Constant 操作符拖到画布上。
双击 Constant 操作符。在 Constant Editor 中,单击 Output Attributes 选项卡。 Constant Editor 打开。为该常量操作符定义一个输出特性,如下所示:
在 Expression 域中,输入 'A'(代表 active)。单击 OK。
|
||||||||||||||||||||||||||||
6. |
将 Constant 操作符的 OUTPUT1 特性映射到 CHANNELS 维度的 STATUS 特性,如以下屏幕截图所示:
|
||||||||||||||||||||||||||||
7. |
使用外部表的一个设计优点是,可通过外部表来支持对文件的并行访问。 并行读取能力可优化大容量系统和企业级系统中的性能。要针对并行访问来配置外部表,在 Projects Navigator 面板中,展开 TRGT_DATA_MARTS > External Tables。右键单击 Channels_ext 并选择 Configure。 在 Configuration of CHANNELS_EXT 面板中,展开 Parallel。
默认情况下,Parallel Access Mode 属性设置为 false,Parallel Access Drivers(并行程度)设置为 1。ORACLE_LOADER 访问驱动程序尝试将大的数据文件划分成一些可以单独处理的数据块。并行程度指示可以启动用以处理数据文件的访问驱动程序的个数。 单击 Save All ( |
利用 Pivot 操作符,您可以将一个包含多个特性的行转换为多行。这里的 pivot 映射示例将一个每行含有一年四个季度销售数据的表转换为一个每行只含一个季度销售数据的表。
例如,您的数据组织结构如下:
Year | Q1_Sales | Q2_Sales | Q3_Sales | Q4_Sales | |
2005 | 10000 | 15000 | 14000 | 25000 | |
2006 | 12000 | 16000 | 15000 | 35000 | |
2007 | 16000 | 19000 | 15000 | 34000 |
您可以执行 pivot 操作将上述数据集转换为以下每季度一行的形式:
Year | Quarter | Sales | |
2005 | Q1 | 10000 | |
2005 | Q2 | 15000 | |
2005 | Q3 | 14000 | |
2005 | Q4 | 25000 | |
2006 | Q1 | 12000 | |
2006 | Q2 | 16000 | |
等等... |
与之相反的是 unpivot 操作符。
在本主题中,您将查看使用 pivot 和 unpivot 操作符的简单映射。
![]() |
查看执行 Pivot 的映射 | |
![]() |
查看执行 Unpivot 的映射 |
1. |
展开 TRGT_ENTERPRISE_MODEL > Mappings。右键单击 PIVOT_SALES 并选择 Open。 单击 Auto Layout (
注意:在该映射中您可以看到,源表 SALES_BY_QTR 含有一些分别用于存储每年中每个季度销售数据的列。pivot 操作符使您可以定义输入列、输出列以及如何对数据进行透视处理。而在目标表 SALES_TGT 中,每个季度的数据占一行。 |
2. |
查看该映射中 Pivot 操作符的内容。双击该映射中的 PIVOT 操作符。随即打开 PIVOT Editor。 单击 Input Attributes。注意,YEAR 已选作键列,因为其对于每个经过透视处理得到的行都保持不变。
|
3. |
单击 Output Attributes 或 Next。注意 QUARTER 已选作 Row locator 列。此为透视列。
|
4. |
单击 Pivot transform 或单击 Next。在这里定义应该怎样进行转换。 您定义如何将含有多列的一行转换为多行;您为每种可能的情况输入一行(这样,对 Q1、Q2、Q3 和 Q4 各有一行)。
单击 OK。关闭 PIVOT_SALES 映射面板。 使用 pivot 操作符,您可以通过一种简单的逐步方式来定义一个 pivot 转换。 |
1. |
展开 TRGT_ENTERPRISE_MODEL > Mappings。右键单击 UNPIVOT_SALES 并选择 Open。 单击 Auto Layout (
注意:在 Unpivot 操作中,选择键列,接着定义行定位器(即逆透视列),然后定义逆透视转换细节。 |
2. |
查看该映射中 Unpivot 操作符的内容。双击该映射中的 UNPIVOT 操作符。随即打开 UNPIVOT Editor。 单击 Input Attributes。 注意 YEAR 已选作键列。
|
3. |
单击 Row Locator 或 Next。在这里,选择行定位器列,然后对每个匹配的行定义各自的行定位器值。
|
4. |
现在单击 Output Attributes 或 Next。在这里,定义 unpivot 操作符的输出特性。
|
5. |
单击 Unpivot transform 或 Next。在这里定义应该怎样进行转换。 定义如何从匹配行中获取列数据。
单击 OK。关闭 UNPIVOT_SALES 映射面板。 |
在本主题中,您将查看已完成的映射。本主题重点向您介绍您在设计任何类型的 ETL 作业时需要知道的各种操作符及其属性。
1. |
展开 TRGT_DATA_MARTS > Mappings。右键单击 Map_Dim_D2_Customers 并选择 Open。此映射使用了许多不同的操作符。 注意:在工具栏上,单击 Fit in Window ( 注意:CUSTOMERS 表从多个源中获取数据。此映射联接 People 和 Business_Parties 表以确定人员的角色(员工、供应商、客户、管理人员)。联接了一些 Address 表以处理多种地址(记账地址、邮寄地址、发货地址等等)。 注意:为简单起见,可以用一个联接器和筛选器来联接所有四个源表。
|
2. |
查看 CUSTOMER_FLTR 操作符。双击 CUSTOMER_FLTR 操作符展开它,或者您可以只是单击它以便高亮显示。在 Property Inspector 面板中,查看 Filter Condition 属性。. 注意: 该筛选器操作符有条件地从一个行集中筛选出一些行。
要查看完整的筛选条件,单击省略号。 注意:依据该筛选条件,筛选器只提取出其角色设置为客户的那些记录的数据。
单击 OK。
|
3. |
查看 YOB_EXPR 表达式操作符。双击 YOB_EXPR 操作符。 如果需要,单击 注意:利用该表达式操作符,您可以编写 SQL 表达式来定义该操作符的一个输出参数的非过程性算法。表达式文本可以包含输入参数名称、变量名称和库函数的组合。 在 Expression Editor 中,单击 Output Attributes。要查看完整的表达式,单击省略号。
在 Expression Builder 中单击 OK。单击 OK 关闭 Expression Editor。关闭 Map_Dim_D2_Customers 映射面板。 至此,您查看完了这个映射。您了解了如何在映射中使用筛选器操作符和表达式操作符。 |
4. |
现在我们来查看另一个映射,以便了解在定义各种 ETL 操作时可以使用的其他一些操作符。 展开 TRGT_DATA_MARTS > Mappings。右键单击 MAP_SALES 并选择 Open。查看该复杂映射的局部内容。
注意:单击 Fit in Window ( |
5. |
单击 Auto Layout ( 注意该映射有三个源:ORDER_ITEMS 表、ORDERS_VIEW_STG 视图和一个外部表 WEEKLY_SALES_EXT。有一个 Join 操作符,用于联接两个源(表和视图)。之间有两个表达式操作符。在上一个主题中您已了解了这些操作符的工作原理。 如果想深入了解细节,可查看每个操作符及其属性。
|
6. |
外部表源映射到一个 pivot 操作符,一些列经过一个表达式操作符的处理。您已了解了如何使用外部表和 pivot 操作符。现在我们来继续了解这个映射。
|
7. |
在此映射中添加的一个有趣的操作符是 SET Operation 操作符。单击选中它。在 Property Inspector 面板中,Set operation 设置为 UNIONALL。 注意: SET operation 操作符在映射中执行 union、union all、intersect 和 minus 操作。
|
8. |
水平滚动到 AGG 操作符。这是一个聚合操作符。聚合操作符执行数据聚合(如 SUM 和 AVG),并提供一个含有聚合数据的输出行集。
单击 AGG 操作符选择它。在 Property Inspector 面板中查看 Aggregator 属性。最重要的属性是 Group By clause 和 Having Clause。 注意:在聚合操作符的 Group By Clause 中您可以使用 CUBE 和 ROLLUP 子句。您还可以在 HAVING 子句中使用 GROUPING。
要查看此映射的 Group By Clause,单击相应省略号。在 Expression Builder 中,查看 Group By Clause。单击 OK。
|
9. |
双击 AGG 操作符打开 Aggregator editor。 单击 Output Attributes。注意 TOTAL_REVENUE 列,其表达式指示该列是销售额的总和。
如果您想添加一个新的输出特性,只需在 Attribute 列中输入其名称然后定义聚合表达式。例如,您想计算平均销售额。 定义一个输出特性 AVG_SALES。单击 Expression 列旁的省略号以打开 Expression Builder。 从 Function 下拉列表中,选择 AVG 函数。 在 ALL 或 DISTINCT 中选择一个。 从下拉列表中选择要对其进行聚合操作的特性。选择 SALES。 单击 Use Above Values 将相应表达式放入文本区域中。
单击 OK。 再次单击 OK 关闭 Aggregator Editor。 现在我们定义了该输出特性。接着应将此特性映射到目标中的一个相应输出特性。 单击 Save All ( 您已了解了各种不同的操作符,知道了如何使用它们以满足业务需要。利用这些操作符,您可以实现任何 ETL 操作。 |
在本教程中,您学习了如何:
![]() |
在映射中使用联接操作符、序号操作符和转换操作符 | |
![]() |
使用外部表将数据加载到一个维度 | |
![]() |
使用 pivot 和 unpivot 操作符 | |
![]() |
在映射中使用各种操作符,如筛选器、表达式、集合和聚合操作符 |
将光标置于该图标上可以隐藏所有的屏幕截图。