本文介绍如何在Oracle Warehouse Builder 11g里创建一个Mappings,并且以平面文件作为数据源或者目标源。最常见的平面文件有.csv文件等一些内容带有规律格式的文件。
本文主要有以下两个主要方面:
A 以平面文件为数据源,Oracle数据库为目标源。
B 以平面文件为目标源,Oracle 数据库为数据源。
实践操作前,我们都需要打开本地的Design Center来定义和设计我们的项目,操作步骤如下:
1 点击开始,选择Oracle 产品,选择Warehouse Builder,点击Design Center
打开Design Center后,在如下的窗口输入上篇 [OWB 11g循序渐进(1)] 所配置的账户及相应密吗,并点击 OK:
成功登陆Design Center,如图所示:
好了,现在登入设计中心后,我们就可以开始我们的两个主要步骤,当然在我们的实践中,需要用到一个有测试数据的平面文件,我这里直接引用MSSQL的测试数据库生成的一个平面文件。
我们在实践开始前,我们先把这个文件放置到实践环境中的C:\FlatFiles文件夹里。
A. 以平面文件为数据源
(1). 创建一个Oracle的目的源Location
1.在Connection Exploere中,展开Locations->Databases->Oracle,右键单击Oracle,点击New
2.在弹出的对话框输入如下图所示信息,输入信息后,点击Test Connection,在Test Results框中返回Successful! ,则连接成功.
3.点击OK. 成功创建一个Location.
(2).创建一个Files的数据源Location
1.在Connection Exploere中,展开Locations->Files,右键单击Files,点击New
2.在弹出的对话框中输入如图所示信息:
3.点击OK,创建成功后,如图所示:
(3).创建一个Oracle 类型的Module
1.在Project Explorer中,MY_Project->Databases->Oracle里右键单击New,如图所示:
2.在弹出的对话框输入如图所示信息,并点击下一步:
3.在Location栏位里,选择我们之前创建的Location [ATSTESTDB],点击Finsih:
4.成功创建Module后,展开它,如图所示:
(4).创建一个Files 类型的 Module
1.在Project Explorer中,MY_Project->Files里右键单击New,如图所示:
2.在弹出的对话框中点击Next,进入以下对话框,输入如图所示信息,并点击Next
3.在弹出的对话框中,选择之前我们创建的Files类型的 Location [ATSTestFiles_CSV],并且在Import after finish上打勾,之后点击Finish
4.当我们勾选了Import after finish,点击以上的Finish后,弹出以下对话框,点击Next:
5.选择All Data Files: ,如下图所示,点击Next:
6.点击如图所示按钮:
点击后得到如下图所示:
7.点击Next,得到如图所示窗口:
8.点击Sample,得到如图所示窗口:
9.点击Next,进入如图所示窗口:
10.点击Next,进入如图所示窗口:
11.点击Next,并在窗口中的Field Delimiter 选择 Tab,如图所示:
12.点击Next,进入如图所示窗口:
13.点击Next,并设置如图所示:
14.点击Finish,返回到如图所示窗口:
15.点击Finish,配置完成Files Module,如图所示:
(5).创建External Tables
1.右键点击My_Project->Databases->Oracle->TARGET_ATSTESTDB->External Tables,点击New,如图所示:
2.弹出以下对话框
2.点击Next,输入如图所示信息:
3.点击Next后,如图所示,点击EMPLOYEES_CSV
4.点击Next,在如图所示对话框,Default Location选项中选择 ATSTESTFILES_CSV
5.点击Finish,创建成功后,如图所示
(6).创建一个目标源表
创建一个目标源表,这个表我们可以是已经存在与数据库的,也可以是我们在Design Center里面创建。 如果是在数据库里面已经有的,那么我们可以通过和导External Table的方式把目标源表导Tables里面。
这里,我们介绍通过Design Center的方式来创建这个目的源表,步骤如下:
1. 在Tables点击右键,点击New,如图所示:
2.在弹出的窗口Data Object Editor里面按如图所示,输入表的名称:
3.添加列。在Columns栏里输入相应的列名,如图所示:
4.输入或填写相应列后,关闭Data Object Editor窗口,目标源表设计完成,此时,它还不真正存在于数据库里面。我们后续创建好Mappings后,再一起部署。
(7).创建Mappings
Mappings存储的是数据从数据源到目标源的流程的定义。我们需要在这里创建一个流程,让他把数据从flat file导入到目标表里面。在我们的例子里面是从EMPLOYEES_CSV_SOURCE到EMPLOYEES的一个过程。
1.右键单击Mappings,点击New,如下图所示:
2.在弹出的对话框输入如下信息,并且点击OK:
3.弹出的Mapping Editor: CSV_TO_Table对话框里面,展开Target_ATSTestDB,如图所示:
4.拖拽左边Tables里面的对象EMPLOYEES和External Tables里的对象EMPLOYEES_CSV_SOURCE到右边的Mapping栏里,如图所示:
5.接下来,我们需要连接列与列之间的Mapping关系,左键按住EMPLOYEES_CSV_SOURCE表里面的列EMPLOYEEKEY,拖拽到表EMPLOYEES表里面的EMPLOYEESKEY列上。为其他列重复以上的操作。得到如图结果:
这个Mapping的FLOW是把数据按照图中的映射关系,从表EMPLOYEES_CSV_SOURCE全部直接的导入到表EMPLOYEES里面,仅此而已。
6.点击左上方的保存按钮,并关闭改Mapping Editor窗口:
现在,我们也创建好了数据源与目标源的关系。接下来,我们需要部署我们的项目。
(8).部署与验证
1.右键点击TARGET_ATSTESTDB,点击Deploy,如图所示:
2.查看初始数据。右键点击表EMPLOYEES,选择Data,如图所示:
同样的操作,查看EMPLOYEES_CSV_SOURCE表的数据,得到如下:
注意,我们从图中的红色圈圈里面可以看到两张表的记录行数:
目标源: EMPLOYEES的行数为 0.
数据源:EMPLOYEES_CSV_SOURCE的记录行数为296.
查看完毕后,关闭这两个窗口。
3.运行Mapping.
右键点击CSV_TO_TABLE,点击Start....如图所示:
4.运行完成Mapping后,重新右键点击EMPLOYEES表,选择Data,如果所示,现在EMPLOYEES表里的数据行数也达到了296,通过验证,我们成功把数据从CSV文件导入到Table里面。
小结:
上述实践,通过建立不同类型的Location,并建立目标数据源,与文件库(Files),并通过建立External Table来和文件建立关系。创建Mapping,定义数据流的逻辑。部署,运行,验证数据。一个简单的"ETL"建立完毕,为什么给ETL加引号呢,因为上述的Mapping等操作只是ETL的冰山一角。后续,我会继续涉及到Process Flows, Schedules...等等,一系列OWB的操作。
B.以平面文件为目标源
有了前面的步骤的接触,我们这个section就只做简单的截图。
1.创建Mappings。在Oracle->TARGET_ATSTESTDB->Mappings新建一个 Mappings, 名称设置为Table_To_CSV .
2.分别拖拽Employees 表以及Employees_CSV到设计窗口里,并把对应列相应链接起来,如下图所示:
设置完成后,点击保存,关闭窗口。
3.右键点击刚创建的Mapping: Table_To_CSV 选择 Configure...,在弹出的窗口配置如下:
在Target Data File Name栏位里输入:OutputCSV.csv 并且点击OK.
4. 右键点击刚创建的Mapping: Table_To_CSV 选择 Deploy.
5.部署完成后,右键点击Mapping: Table_To_CSV,选择Start,运行此Mapping.
运行完成后,我们到Source_ATSTESTFILES的Lacation存储库(C:\FlatFiles)找到刚生成的文件OutputCSV.csv,用记事本打开后,如下所示:
我们可以看到,每个字段都有双引好包括着。
6.上面的结果看到,结果集里每个字段都默认有双引号包括。如何去除呢?
1.双击Mapping: Table_To_CSV 打开编辑器
2.点击Employees_CSV Operator,查看Flat File Operator Properties,如图所示:
3.把上图Field Enclosure Characters(红线标注)的栏位里的双引号去掉,并保存。
7.重新部署该Mapping: Table_To_CSV ,并重新运行该 Mapping.
8.重新查看生成的结果如下:
现在整个结果都正确了。
至此,用Flat File作为数据源或者目标数据源与Oracle数据库表做简单ETL都演示完成。谢谢大家。 如果有什么问题请留言或者给我发Email: wwwioriwww@hotmail.com.
Thanks,
wwwiori | AnythingStudio