:Oracle Bulk Loader组件其实用的就是Oracle SQL Loader,可在windows和linux等环境使用。

1.Oracle SQL Loader 使用简介
SQL Loader是oracle的高速批量数据加载工具。这是一个非常有用的工具,可用于从多种平面文件格式向Oracle数据库中加载数据。SQLLDR可以在极短的时间内加载数量庞大的数据。
SQL Loader具有很多功能,包括以下能力:
1.可以从不同文件类型的多个输入数据文件中加载数据;
2.输入记录可以是定长的或变长的记录;
3.可以在同一次运行中加载多个表,还可以逻辑地将选定的记录载入到每个表中;
4.在输入数据载入表之前,可以对其使用SQL函数;
5.多个物理记录可以被编译成一个逻辑记录,同样,SQL可以提取一条物理记录并把它作为 多个逻辑记录加载;
6.支持嵌套、嵌套表、VARRAYS和LOBS(包括BLOGCLOBNLOBBFILE);

2.Oracle Bulk Loader组件介绍
在这里插入图片描述
wiki文档介绍
https://wiki.pentaho.com/display/EAI/Oracle+Bulk+Loader
在这里插入图片描述
在这里插入图片描述
3.Oracle Bulk Loader组件实战介绍
有时对大表加工到oracle用表输出效率低,可采用如下的oracle批量加载方式,保证效率:
a.准备测试文件
在这里插入图片描述
b.创建表
在这里插入图片描述
c.kettle准备过程如下
在这里插入图片描述
d.文件输入详细设置如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
e.oracle批量加载详细设计如下:
在这里插入图片描述
load action表装载的方法:
INSERT这是缺省方法。该方法假设在数据装载前表是空的,如果在表中有记录,SQLLDR退出,并报:SQLLDR-601: FOR INSERT OPTION,TABLE MUST BE EMPTY,ERROR ON TABLE DEPT
APPEND这种方法允许记录被添加到数据库表中,而且不影响已经存在的记录
REPLACE 这种方法首先删除表中已经存在的记录,然后开始装载新的记录。注意,当老记录被删除时,表上的任意删除触发器将被触发
TRUNCATE 这种方法在装载数据前,使用SQL命令TRUNCATE 删除老的记录,因为去除了触发器的触发并且没有创建回滚,所以这种方法要比REPLACE快得多。
为了使用这种方法约束必须被禁止,并且要授予特定的权限

Direct path它有两种操作模式:
传统路径(conventional path):SQLLDR会利用SQL插入为我们加载数据。
直接路径(direct path):采用这种模式,SQLLDR不使用SQL;而是直接格式化数据库块,而绕过整个SQL引擎和UNDO生成,同时还可能避开REDO生成。
要在一个没有任何数据的库中充分加载数据,最快的方法就是采用并行直接路径加载。
常规路径装载使用SQL INSERT语句和内存中的键数组缓存(bond array buffers)将数据装载到Oracle数据库的表中。
这个过程与其他进程竞争SGA内部的内存资源。如果数据库已经有支持多个并发处理进程的开销,常规路径装载会降低装载的性能。
使用常规路径装载的另外一个开销是装载进程必须搜索数据库,以查找被装载表的部分填充块,并试图填充这些块。这对日常的事务处理是非常有效的,但是它是常规路径装载的一个额外开销。
4.Oracle Bulk Loader过程调度结果
在这里插入图片描述
如下文件是自动生成
log – 记录导入时的日志文件,默认为 控制文件(去除扩展名).log
bad – 坏数据文件,默认为 控制文件(去除扩展名).bad
data – 数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作
errors – 允许的错误记录数,可以用他来控制一条记录都不能错
rows – 多少条记录提交一次,默认为 64
skip – 跳过的行数,比如导出的数据文件前面几行是表头或其他描述
在这里插入图片描述
控制文件介绍:
控制文件中包含描述输入数据的信息(如输入数据的布局、数据类型等),另外还包含有关目标表的信息,控制文件甚至还可以包含要加载的数据。

  1. SQL Loader输入数据:
    SQL Loader能够接收多种不同格式的数据文件。文件可以存储在磁盘或磁带上,或记录本身可以被嵌套到控制文件中。
    记录格式可以是定长的或变长的,定长记录是指这样的记录:
    每条记录具有相同的固定长度,并且每条记录中的数据域也具有相同的固定长度、数据类型和位置
    2.SQL Loader输出:
    (1)LOAD DATA
    (2)INFILE *
    (3)INTO TABLE DEPT
    (4)FIELDS TERMINATED BY ‘,’
    (5)(DEPTNO,DNAME,LOC)
    (6)BEGINDATA
    (7)10,Sales,Virginia
    (8)20,Accounting,Virginia
    (9)30,Consulting,Virginia
    (10)40,Finance,Virginia

LOAD DATA(1):这会告诉SQLLDR要做什么(在这个例子中,则指示要加载数据)。SQLLDR还可以执行CONTINUE_LOAD,也就是继续加载。
只有在继续一个多表直接路径加载时才能使用后面这个选项。
INFILE * (2):这会告诉SQLLDR所要加载的数据实际上包含在控制文件中,如第6-10行所示。
也可以指定包含数据的另一个文件的文件名。如果愿意可以使用一个命令行参数覆盖这个INFILE语句。[命令行选项会覆盖控制文件设置]。

INTO TABLE DEPT(3):这告诉SQLLDR要把数据加载到哪个表中。
FILEDS TERMINATED BY ‘,’(4):告诉SQLLDR数据的形式应该是用逗号分隔的值。
(DEPTNO,DNAME,LOC)(5):告诉SQLLDR所要加载的列,这些列在输入数据中的顺序以及数据类型。
这是指输入流中数据的数据类型,而不是数据库中的数据类型,在这个例子中,列的数据类型默认为CHAR(255)。
BEGINDATA(6):告诉SQLLDR你已经完成对输入数据的描述,后面的行(第7-10行)是要加载到DEPT表的具体数据。

control0.cfg内容
在这里插入图片描述
log文件内容
在这里插入图片描述
dat文件内容
在这里插入图片描述
目标表数据量
在这里插入图片描述
下面是增加SQL Loader性能的一些补充技巧:

1)使用定位域而不要使用分隔域,分隔域要求装载器搜索数据以查找分隔符。定位域比较快,因为装载器只需要做简单的指针运算。
2)为终止域指定最大长度,使每个捆绑数组更为有效地插入。
3)预分配足够的存储空间。当数据被装载时,表中需要更多的空间, Oracle分配更多的区间以容纳数据,
如果在数据装载期间频繁地做这项操作,处理的开销将非常大。在装载之前计算或估算存储空间需求能够让你预先创建必要的存储空间。
4)如果可能,在控制文件中尽量避免使用NULLIF和DEFAULTIF子句。这两个子句对于被装载的每条记录都会引起列运算。
5)分割数据文件,并行运行常规路径装载。
6)通过使用命令行参数ROWS,减少提交次数。
7)避免不必要的字符集转换,确保客户端的NLS_LANG环境与服务器端的相同。
8)只要可能,尽量使用直接路径装载方法。
9)当使用直接路径装载方法时,为表的最大索引预先排序并使用SORTED INDEXES子句。
10)当使用直接路径装载方法时,尽量使用并行直接路径选项。
11)在直接路径装载期间,尽可能少使用重做日志。有三种不同级别的控制实现这点:

如内容有错欢迎大家指正!!!
更多ketlle视频资料下载地址:ketlle视频资料
资源下载链接:kettle oracle批量加载-Oracle Bulk Loader
读后有收获可以支付宝请作者喝咖啡
在这里插入图片描述
另外也欢迎大家加入 下面的群来聊一聊 kettle那些事!

在这里插入图片描述

Logo

更多推荐