本文主要介绍如何将文件里的数据通过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对话框中输入相关参数如下图:
    Loading Data From File To Table By ODI 12c
    输入完成后,点击左上方的“保存”,接着点击“Test Connection”测试下是否可以连接。
    JDBC对话框,点击JDBC Driver后面的“查找”图标,选择“ODI File JDBC Driver”。点击JDBC URL,选择“jdbc:snps:dbfile”,根据文件的编码格式加入相关参数值即可。如下图所示:
    Loading Data From File To Table By ODI 12c
    其中的ENCODING=UTF8指文本文件的编码格式。
  • 定义物理方案
    接着创建物理方案。右击“FILE_GENERIC”,选择“New Physical Schema”,如下图:
    Loading Data From File To Table By ODI 12c
    在Definition对话框中输入方案的目录(文本文件所在的目录)和工作目录(可以和方案目录相同),目录实际上指的是数据文件的存放路径,点击“保存”。

    1.2 定义源逻辑体系结构

    右击ODI Studio->Topology->Logical Architecture->File,选择“New Logical Schema”,如下图:
    Loading Data From File To Table By ODI 12c
    随便定义个名称,在Definition对话框中选择上述创建物理方案,保存。
    1.3 定义源设计模型

  • 定义模型文件夹
    ODI Studio->Designer,选择“New Model Folder”,随便定义个名称,点击保存。
    Loading Data From File To Table By ODI 12c
  • 定义模型
    右击新建的模型文件夹,选择“New Model”,在Definition对话框中随便定义名称,Technology选择“File”,逻辑方案选择上述创建的,点击“保存”。
    Loading Data From File To Table By ODI 12c
  • 定义New Datastore
    右击模型名称,选择“New Datastore”,随便定义名称,Datastore Type选择Table,输入源数据文件名称,点击保存。
    Loading Data From File To Table By ODI 12c
    接着在File对话框中,设置字段与记录的分隔符,如下图:
    Loading Data From File To Table By ODI 12c
    最后在属性对话框中,通过逆向工程导入表结构。导入的数据类型和字段名称需要进行调整,也可以直接手工添加字段。
    Loading Data From File To Table By ODI 12c
    表结构导入完成后,可以右击Datastore名称,选择“View Data”预览表数据。

    二、目标表准备工作

    首先在目标库上创建对应的表,其次依次定义物理体系结构以及逻辑体系结构。

    2.1 定义物理体系结构

  • 创建New Data Server
    ODI->Topology->Physical Architecture,右击Oracle,选择”New Data Server“,在Definition对话框中定义一个名称,输入Oracle实例名称以及用户信息,保存。
    Loading Data From File To Table By ODI 12c
    接着在JDBC对话框中,选择JDBC驱动以及输入jdbc连接URL,可以通过点击“Test Connection”测试,测试成功后保存。
    Loading Data From File To Table By ODI 12c
  • 创建New Physical Schema
    右击“Data Server”,选择“New Physical Sever”,在Definition对话框中选择对应的schema,其他使用默认值即可,保存。
    Loading Data From File To Table By ODI 12c

    2.2 定义逻辑体系结构

    ODI->Topology->Logical Architecture,右击Oracle,选择”New Logical Schema“,定义一个名称,选择上述创建的Physical Schema,保存。
    Loading Data From File To Table By ODI 12c

    2.3 定义目标设计模型

    ODI->Designer->Models->New Model,定义名称,Technology选择Oracle,Logical Schema选择对应的名称,点击保存。
    Loading Data From File To Table By ODI 12c
    接着点击Reverse Engineer,将表结构同步过来。这里除了目标表以为,rhnuser用户下的所有表结构都会同步一份。

    三、映射

    3.1 创建设计工程

    ODI->Designer->Projects->New Project,为工程定义个名称,保存。
    Loading Data From File To Table By ODI 12c

    3.2 导入知识模块

    右击工程名称下面的Knowledge Modules,选择Import Knowledge Modules,这里的模块/u01/app/oracle/Middleware/odi/sdk/xml-reference路径下,这里选择所有的模块。
    Loading Data From File To Table By ODI 12c

    3.3 创建映射

    Designer > Projects > IMP_F_TBE>First Folder右击Mappings, 选择New Mapping,定义一个名称,接着将源表和目标表拖到映射里面,并通过字段名称进行自动关联。
    Loading Data From File To Table By ODI 12c
    点击在逻辑结构里点击目标表,将Target的Integration Type设置为Incremental Update(默认为Append),保存。
    Loading Data From File To Table By ODI 12c
    在物理结构里,点击Default,将Loading Knowledge Module设置为LKM SQL to SQL (Built-In).GLOBAL保存。
    Loading Data From File To Table By ODI 12c

    四、执行映射

    右击映射名称,选择RUN,如图:
    Loading Data From File To Table By ODI 12c
    运行过程可以在Operation->Session里看到,如图:
    Loading Data From File To Table By ODI 12c

    注意事项:

    1、目标表中必须存在主键;
    2、如果数据库实例和ODI不在一台机器上,源数据文件必须在各个服务器上的相同位置。因为在加载数据之前,会在数据库实例中定义一个目录指定文件的位置。如果文件不在同一位置,会出现下图中的报错:
    Loading Data From File To Table By ODI 12c
    3、Linux平台的其他第三方的jdbc驱动都放在用户家目录的.odi/oracledi/userlib文件夹以及/u01/app/oracle/Middleware/odi/agent/lib文件夹。千万别忘记重启agent!
    4、Windows平台的其他第三方的jdbc驱动都放在%APPDATA%\Roaming\odi\oracledi\userlib文件夹。千万别忘记重启agent!

    参考文献:

    1、ODI 12C加载平面文件到oracle数据库
    2、ODI 12c - File to Table