oracle sqlldr 导入 txt csv大文件
oracle sqlldr 导入 txt csv大文件
一、首先用 DBeaver 开源免费数据库连接客户端工具根据txt 或csv 文件生成建表 sql ,(DBeaver 的数据导入组件,我见过的比较简单易懂强大的数据导入组件)建立导入数据的对应表。最好先用 DBeaver 慢速导入几千行或几万行测试表和数据是否对应,然后再用sqlldr 快速导入大文件。用 DBeaver 生成表 ddl ,删除有已有测试数据的表,重新用ddl 语句建立表,这样表是空的,而且速度快,比 delete from 快很多。
导入时注意 修改 参数。
二、写 ctl 文件
--导入语句
--sqlldr userid=xxx/[email protected]:1521/orcl control= C:\Users\king\Desktop\tablename.ctl direct=true parallel=true log= C:\Users\king\Desktop\tablename.txt
--此文件为 utf-8 字符 ,这些注释并不影响数据导入
-- sqlldr3种导入方式,这里用的第三种最快的。
--1、这里先介绍基本的导入方式,
--2、然后介绍direct导入方式,(直接路径导入方式)
--3、最后介绍parallel导入方式。(并行导入方式)
--第一种和第二种的区别:
--options中的BINDSIZE换成了COLUMNARRAYROWS,
--因为BINDSIZE是常规路径绑定数组的大小,
--而COLUMNARRAYROWS是直接路径列数组的行数。
--第三种必须在第二种的基础上
options(skip=1,COLUMNARRAYROWS=10000, READSIZE=20971520, ERRORS=999999999)
--skip 1 ,表示跳过第一行是标题或其他
--columnarrayrows 直接路径列数组的行数 (默认 5000),根据内存大小修改
--readsize 读取缓冲区的大小 (默认 1048576)
load data
infile 'C:\Users\king\Desktop\tablename.csv'
append -- 追加的方式 导入表 还有 insert默认方式 、replace(等价delete from table语句) 、truncate(等价truncate table语句)
into table "tablename" --修改表名(windows测试表名可以小写)
Fields terminated by ',' -- 逗号分割
--FIELDS TERMINATED BY X'09' --(Tab分隔符)
Optionally enclosed by '"' --字段用 “ 包裹
--如果导入的字段存在空值,这个是必须的,否则报 350 错误。
TRAILING NULLCOLS -- 允许为空的字段
(ID,
ZHLB
)
三、 导入数据
sqlldr userid=xxx/[email protected]:1521/orcl control= C:\Users\king\Desktop\tablename.ctl direct=true parallel=true log= C:\Users\king\Desktop\tablename.txt
参数解释:
direct=true
直接导入数据
parallel=true
并行导入数据