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 userid=username/password@orcl 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 userid=username/password@orcl control=xxx.ctl log=xx.log bad=xx.bad direct=true parallel=true
然后在控制文件中
load data 语句上边加上一句 ?unrecoverable?
?2者同时使用,速度提升惊人,之前5分钟,现在只需要1分钟。。
?