今天做了1个数据导入需求,文本记录有128944条,TXT文件大小6253k,以前都是用oracle的text import方式导入,刚试验了一下,不灵验,当导入到2万多条的时候,PLSQL就当掉了,走不动了。

 因为考虑到1次导入,所有决定采用SQLLOADER的方式。

 使用方法可以看这位仁兄的文章,很详细。http://hi.baidu.com/zpdbdh/blog/item/547fdec9b7392d107e3e6f19.html

 我测试了一下,的确很快。

 环境1:(ID1,ID2....ID9),9个字段,而且导入数据按照数据字典中数据项顺序一致,文本9列,我的测试log如下:

我注意到运行的情况是1w条记录提交1次,控制台有信息可以看到

****************************************************************

 128944 行 加载成功。
  由于数据错误, 0 行 没有加载。
  由于所有 WHEN 子句失败, 0 行 没有加载。
  由于所有字段都为空的, 0 行 没有加载。

在直接路径中没有使用绑定数组大小。
列数组  行数:    5000
流缓冲区字节数:  256000
读取   缓冲区字节数: 1048576

跳过的逻辑记录总数:          0
读取的逻辑记录总数:        128944
拒绝的逻辑记录总数:          0
废弃的逻辑记录总数:        0
由 SQL*Loader 主线程加载的流缓冲区总数:       32
由 SQL*Loader 加载线程加载的流缓冲区总数:        0

从 星期一 11月 30 14:05:38 2009 开始运行
在 星期一 11月 30 14:05:56 2009 处运行结束

经过时间为: 00: 00: 17.99
CPU 时间为: 00: 00: 00.78

****************************************************************************

环境2:(ID1,ID2....ID12),12个字段,而且导入数据与数据字典中数据项顺序不一致,有空行,文本9列,有3列文本没数据,我的测试log如下:

 我注意到是50条

大数据组件数据联邦ETL 批处理Flink SQL 大数据loader_sql

左右记录提交1次。所以这样的情况比较慢:看日志

****************************************************************************

 128944 行 加载成功。
  由于数据错误, 0 行 没有加载。
  由于所有 WHEN 子句失败, 0 行 没有加载。
  由于所有字段都为空的, 0 行 没有加载。

为绑定数组分配的空间:                148608 字节 (64 行)
读取   缓冲区字节数: 1048576

跳过的逻辑记录总数:          0
读取的逻辑记录总数:        128944
拒绝的逻辑记录总数:          0
废弃的逻辑记录总数:        0

从 星期一 11月 30 14:31:04 2009 开始运行
在 星期一 11月 30 14:38:17 2009 处运行结束

经过时间为: 00: 07: 12.42
CPU 时间为: 00: 00: 02.67

 

 

****************************************************************************

同样的数据,导入数据的顺序不一样,结果是天壤之别,后者经过时间是前者的24倍,cpu时间是2.4倍。

如果要想导入够快,要数据字典中数据项顺序和数据值顺序一致(包括字段数量和排列顺序)。我想时间应该是花在数据匹配上。