本文主要介绍如何将文件里的数据通过ODI导入到表中。
一、源文件准备工作
源文件是一个文本文件,存放在/home/oracle/fsource目录中。
[oracle@hdp06 ~]$ la /home/oracle/fsource/
-rw-rw-rw- 1 oracle oinstall 4.2M Jan 29 10:00 exam_score.txt
1.1 定义源物理体系结构
- 定义New Data Server 右击ODI Studio->Topology->Physical Architecture->File,打开FILE_GENERIC,在Definition对话框中输入相关参数如下图: 输入完成后,点击左上方的“保存”,接着点击“Test Connection”测试下是否可以连接。 JDBC对话框,点击JDBC Driver后面的“查找”图标,选择“ODI File JDBC Driver”。点击JDBC URL,选择“jdbc:snps:dbfile”,根据文件的编码格式加入相关参数值即可。如下图所示: 其中的ENCODING=UTF8指文本文件的编码格式。
- 定义物理方案 接着创建物理方案。右击“FILE_GENERIC”,选择“New Physical Schema”,如下图: 在Definition对话框中输入方案的目录(文本文件所在的目录)和工作目录(可以和方案目录相同),目录实际上指的是数据文件的存放路径,点击“保存”。
1.2 定义源逻辑体系结构
右击ODI Studio->Topology->Logical Architecture->File,选择“New Logical Schema”,如下图: 随便定义个名称,在Definition对话框中选择上述创建物理方案,保存。 1.3 定义源设计模型
- 定义模型文件夹 ODI Studio->Designer,选择“New Model Folder”,随便定义个名称,点击保存。
- 定义模型 右击新建的模型文件夹,选择“New Model”,在Definition对话框中随便定义名称,Technology选择“File”,逻辑方案选择上述创建的,点击“保存”。
- 定义New Datastore 右击模型名称,选择“New Datastore”,随便定义名称,Datastore Type选择Table,输入源数据文件名称,点击保存。 接着在File对话框中,设置字段与记录的分隔符,如下图: 最后在属性对话框中,通过逆向工程导入表结构。导入的数据类型和字段名称需要进行调整,也可以直接手工添加字段。 表结构导入完成后,可以右击Datastore名称,选择“View Data”预览表数据。
二、目标表准备工作
首先在目标库上创建对应的表,其次依次定义物理体系结构以及逻辑体系结构。
2.1 定义物理体系结构
- 创建New Data Server ODI->Topology->Physical Architecture,右击Oracle,选择”New Data Server“,在Definition对话框中定义一个名称,输入Oracle实例名称以及用户信息,保存。 接着在JDBC对话框中,选择JDBC驱动以及输入jdbc连接URL,可以通过点击“Test Connection”测试,测试成功后保存。
- 创建New Physical Schema 右击“Data Server”,选择“New Physical Sever”,在Definition对话框中选择对应的schema,其他使用默认值即可,保存。
2.2 定义逻辑体系结构
ODI->Topology->Logical Architecture,右击Oracle,选择”New Logical Schema“,定义一个名称,选择上述创建的Physical Schema,保存。
2.3 定义目标设计模型
ODI->Designer->Models->New Model,定义名称,Technology选择Oracle,Logical Schema选择对应的名称,点击保存。 接着点击Reverse Engineer,将表结构同步过来。这里除了目标表以为,rhnuser用户下的所有表结构都会同步一份。
三、映射
3.1 创建设计工程
ODI->Designer->Projects->New Project,为工程定义个名称,保存。
3.2 导入知识模块
右击工程名称下面的Knowledge Modules,选择Import Knowledge Modules,这里的模块/u01/app/oracle/Middleware/odi/sdk/xml-reference路径下,这里选择所有的模块。
3.3 创建映射
Designer > Projects > IMP_F_TBE>First Folder右击Mappings, 选择New Mapping,定义一个名称,接着将源表和目标表拖到映射里面,并通过字段名称进行自动关联。 点击在逻辑结构里点击目标表,将Target的Integration Type设置为Incremental Update(默认为Append),保存。 在物理结构里,点击Default,将Loading Knowledge Module设置为LKM SQL to SQL (Built-In).GLOBAL保存。
四、执行映射
右击映射名称,选择RUN,如图: 运行过程可以在Operation->Session里看到,如图:
注意事项:
1、目标表中必须存在主键; 2、如果数据库实例和ODI不在一台机器上,源数据文件必须在各个服务器上的相同位置。因为在加载数据之前,会在数据库实例中定义一个目录指定文件的位置。如果文件不在同一位置,会出现下图中的报错: 3、Linux平台的其他第三方的jdbc驱动都放在用户家目录的.odi/oracledi/userlib文件夹以及/u01/app/oracle/Middleware/odi/agent/lib文件夹。千万别忘记重启agent! 4、Windows平台的其他第三方的jdbc驱动都放在%APPDATA%\Roaming\odi\oracledi\userlib文件夹。千万别忘记重启agent!