sqlldr控制文件及参数说明详解汇总

导入命令:

sqlldr user/password control=test.ctl skip=1 load=200000 errors=100 rows=1000  bindsize=33554432

导入命令参数说明:

user/password  //数据库的用户名密码
control        //sqlldr控制文件位置
skip=1         //表示跳过第一行,从第二行开始导入
load=200000    //表示并不导入所有的数据,只导入跳过skip参数后的200000条数据
rows=1000     //表示一次加载的行数,默认值为64,此处设置为1000
errors=100    //表示出错100次后,停止加载
bindsize=33554432 //表示每次提交记录缓冲区的大小,默认256k

控制文件:

load data
CHARACTERSET 'UTF8'            //指定字符集
infile '/home/datafile/test.txt'     //指定数据文件绝对路径
append into table test_tab    //指定导入库表
fields terminated by ',' ,'optionally enclosed by '|'    //字段之间的分隔值为逗号,界定符号为"|"
(
ID,                      //从数据文件中读取的字段列
DATA_DT Date "yyyy-mm-dd" ,        //设置日期格式
IMPDATE "to_date('2020-07-03 20:10:37','yyyy-mm-dd hh24:mi:ss')", //插入固定日期格式的值
FLAG constant"open"                      //constant指定插入默认值"open",不从指定的数据文件中读取
) 

控制文件相关参数详解:

  1. LOAD DATA:通常以此为开头,其前可加如下参数:
  2. UNRECOVERABLE:表示数据不可恢复
  3. RECOVERABLE:表示数据可恢复
  4. CONTINUE_LOAD:表示继续添加
  5. INFILE:表示数据文件位置,如果值为*,表示数据就在控制文件中,本例中没有单独的数据文件,对于大多数加载而言,都会将数据文件与控制文件分离。
  6. INTO TABLE tbl_name:tbl_name 即数据要加载到的目标表,该表在你执行 SQLLDR 命令之前必须已经创建。
    INTO 前还有一些很有意思的参数需要说明;
    INSERT:向表中插入数据,表必须为空,如果表非空的话,执行 SQLLDR 命令时会报错,默认就是 INSERT 参数。
    APPEND:向表中追加数据,不管表中是否有数据。
    REPLACE:替换表中数据,相当于先 DELETE 表中全部数据,然后再 INSERT。
    TRUNCATE:类似 REPLACE,只不过这里不使用 DELETE 方式删除表中数据,而是通过 TRUNCATE 的方式删除,然后再 INSERT。
  7. FIELDS TERMINATED BY “,”:设置数据部分字符串的分隔值,这里设置为逗号(,)分隔,当然也可以换成其他任意可见字符,只要确定那是数据行中的分隔符就行。
    (ENAME, JOB, SAL):要插入的表的列名,这里需要注意的是列名要与表中列名完全相同,列的顺序可以与表中列顺序不同,但是必须与数据部分的列一一对应。
  8. position 关键字用来指定列的开始和结束位置
    position(m:n):指从第 m 个字符开始截止到第 n 个字符作为列值
    position(+2:15):直接指定数值的方式叫做绝对偏移量,如果使用号,则为相对偏移量,表示上一个字段哪里结束,这次就哪里开始,相对便宜量也可以再做运算。
    position(*) char(9):这种相对偏移量+类型和长度的优势在于,你只需要为第一列指定开始位置,其他列只需要指定列长度就可以。
  9. FILLER:控制文件中指定 FILLER,表示该列值不导入表中。
  10. BEGINDATA:表示以下为待加载数据,仅当 INFILE 指定为 * 时有效

猜你喜欢

转载自blog.csdn.net/weixin_49192027/article/details/107173780
今日推荐