当前位置: 代码迷 >> SQL >> sqlload的应用心得
  详细解决方案

sqlload的应用心得

热度:54   发布时间:2016-05-05 14:21:35.0
sqlload的使用心得

最近公司没人,把我逼到一线,前期公司为数据导入。使用工具选择sqlload。

1.关于工具的介绍google一搜很多,我直接说我是怎么使用的,遇到什么问题。

2. 数据格式为txt或csv规则数据,比如(第一种无分隔符数据):

test.txt

|----|-----|

姓名 ? 年龄

XX1 ? ? 20

XX2 ? ? 21

建控制文件

test.ctl

options(skip = 1) //跳过第一行,不用导入到数据库

load data

infile 'test.txt' ?// 需要导入的数据文件

append into table test //导入到哪张表 (insert/append....)

TRAILING NULLCOLS //表的字段没有对应的值时允许为空

(

? ? ? name POSITION(1,4),//表示一行中,需要数据的开始和结束位置

? ? ? sex POSITION(6,10)

?

)

建立bat可执行文件 test.bat

sqlldr [email protected] control=test.ctl log=test.log bad=test.bad
pause

然后执行test.bat数据就可以存到数据库中。

第二种是csv格式数据,比如用逗号分隔

那控制文件改成

?

options(skip = 1) //跳过第一行,不用导入到数据库

load data

infile 'test.txt' ?// 需要导入的数据文件

append into table test //导入到哪张表 (insert/append....)

Fields terminated by "," //数据中每行记录用 "," 分隔 ?
?Optionally enclosed by '"' // 数据中每个字段用 '"' 框起

TRAILING NULLCOLS //表的字段没有对应的值时允许为空

(

? ? ? name NULLIF(NAME="") ?"TRIM(:NAME)", // 1.if(null)的情况 2.去掉2端空格

? ? ? sex ,

? ? ?//如果有date类型 datetest?DATE "YYYY-MM-DD HH24:MI:SS"

? ? // 还有好多种用法,我没用到

?

)


?就使用这样的方法导入了几十万,几百万的数据。很方便,很快。

?

提升速度:

?sqlldr [email protected] control=xxx.ctl log=xx.log bad=xx.bad direct=true parallel=true

然后在控制文件中
load data 语句上边加上一句 ?unrecoverable?

?2者同时使用,速度提升惊人,之前5分钟,现在只需要1分钟。。

?