SQLLDR 简介

article/2025/10/12 5:07:03

1. SQLLDR导入

 

1.1 简介

 SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。

 

2.2 语法和参数

语法: SQLLDR keyword=value [,keyword=value,...];

Sqlldr 参数一览

Keyword

默认值

描述

userid

ORACLE 用户名/口令      

control

控制文件名

log

日志文件名

bad

错误文件名

data

数据文件名

discard

废弃文件名

discardmax

全部

允许废弃的文件的数目

skip

0

要跳过的逻辑记录的数目

load

全部

要加载的逻辑记录的数目

errors

允许的错误的数目

rows

常规:64  默认路径:全部

常规路径绑定数组中或直接路径保存数据间的行数

bindsize

256000

常规路径绑定数组的大小

silent

运行过程中隐藏消息

direct

FALSE

使用直接路径

parfile

参数文件: 包含参数说明的文件的名称

parallel

FALSE

执行并行加载

file

执行文件

skip_unusable_indexes

FALSE

不允许/允许使用无用的索引或索引分区

skip_index_maintenance

FALSE

没有维护索引, 将受到影响的索引标记为无用

commit_discontinued

FALSE

提交加载中断时已加载的行

readsize

1048576

读取缓冲区的大小

external_table

NOT_USED

使用外部表进行加载;
 
NOT_USED, GENERATE_ONLY, EXECUTE

columnarrayrows

5000

直接路径列数组的行数

streamsize

256000

直接路径流缓冲区的大小 (以字节计)

multithreading

在直接路径中使用多线程

resumable

FALSE

启用或禁用当前的可恢复会话

resumable_name

有助于标识可恢复语句的文本字符串

resumable_timeout

7200

RESUMABLE 的等待时间 (以秒计)

date_cache

1000

日期转换高速缓存的大小 (以条目计)

 

 

3 范例

利用PLSQL生成测试数据cux_sqlldr_test.txt

BEGIN

  FOR iIN1..100

    LOOP

      IFMOD(i,2)=1THEN

        dbms_output.put_line('"'||i||'","column1_'||i||'",'||'"column2_'||i||'",'||'"column3_'||i||'",'||'"show_column_'||i||'",'||'"hide_column_'||i||'","2017-01-01"'); 

      ELSE

        dbms_output.put_line('"'||i||'","column1_'||i||'", ,'||'"column3_'||i||'",'||'"show_column_'||i||'",'||'"hide_column_'||i||'"');         

      ENDIF;

    ENDLOOP;

END;

 

 

建表

CREATETABLE cux.cux_sqlldr_test

(line_num NUMBER,

 seq_num NUMBER,

 column1 VARCHAR2(30),

 column2 VARCHAR2(30)NOTNULL,

 column3 VARCHAR2(30)DEFAULT'column2',

 show_column VARCHAR2(30),

 hide_column VARCHAR2(30),

 creation_date DATE

);

 

CREATEORREPLACE SYNONYM apps.cux_sqlldr_test FOR cux.cux_sqlldr_test;

CREATESEQUENCE cux.cux_sqlldr_test_sSTARTWITH10001;

CREATEORREPLACESYNONYM apps.cux_sqlldr_test_s FOR cux.cux_sqlldr_test_s;

Sqlldr 有两种使用方式

(1)     在控制文件中包涵数据.

创建一个文件命名为cux_sqlldr_test.ctl,在服务器下创建目录Sqlldr,在sqlldr下创建log和bad文件夹,

上传cux_sqlldr_test.ctl至服务器 ,如下图所示: 


cux_sqlldr_test.ctl内容如下。

OPTIONS (skip=3,rows=128)

load data     

CHARACTERSET ZHS16GBK  

infile  *      

badfile  "/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.bad"

discardfile  "/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.disc" 

TRUNCATE into table cux_sqlldr_test 

WHEN column1 != "column1_1"

Fields terminated by ","

Optionally enclosed by '"'

TRAILING NULLCOLS 

(

line_num  RECNUM ,

seq_num  "cux_sqlldr_test_s.nextval" ,

column1 ,

column2 ,

column3 NULLIF (column3="column3_4"),

show_column "UPPER(:show_column)" ,

hide_column  FILLER , 

creation_date  DATE  'YYYY-MM-DD' "CASE WHEN :creation_date is null THEN TO_CHAR(sysdate,'YYYY-MM-DD')  ELSE :creation_date END"

)

BEGINDATA

"1","column1_1","column2_1","column3_1","show_column_1","hide_column_1","2017-01-01"

"2","column1_2", ,"column3_2","show_column_2","hide_column_2"

"3","column1_3","column2_3","column3_3","show_column_3","hide_column_3","2017-01-01"

"4","column1_4", ,"column3_4","show_column_4","hide_column_4"

"5","column1_5","column2_5","column3_5","show_column_5","hide_column_5","2017-01-01"

"6","column1_6", ,"column3_6","show_column_6","hide_column_6"

"7","column1_7","column2_7","column3_7","show_column_7","hide_column_7","2017-01-01"

"8","column1_8", ,"column3_8","show_column_8","hide_column_8"

"9","column1_9","column2_9","column3_9","show_column_9","hide_column_9","2017-01-01"

"10","column1_10", ,"column3_10","show_column_10","hide_column_10"

 

 

 

运行命令

sqlldr userid=apps/appsjiahuicontrol=/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.ctl  log=$CUX_TOP/sqlldr/file/cux_sqlldr_test.log

 

查看结果


查看表

 

由上图可以看出,运行命令后,在file文件夹下生成了cux_sqlldr_test.log,在bad下生成了cux_sqlldr_test.bad,在表中生成了3条记录,下面分析一下cux_sqlldr_test.ctl的内容和结果

代码

说明

OPTIONS (skip=3,rows=128)

sqlldr 的内容可以写在cotrol文件
load_data的前面,此处跳过前3行,每次提交128行

load data     

加载数据

CHARACTERSET ZHS16GBK  

字符集编码(如果出现乱码要考虑一下)

infile  *      

加载的文件,* 表示本文件

badfile 

错误的数据所放的文件(校验错误)

discardfile

丢弃的数据放的路径(记录的格式错误或过滤行)

TRUNCATE into table cux_sqlldr_test 

TRUNCATE  cux_sqlldr_test再将记录插入表

WHEN column1 != "column1_1"

过滤行,对于值为column1_1的行过滤

Fields terminated by ","

多个字段间用“,”隔开

Optionally enclosed by '"'

单个字段用“"”,“"”开始结束

TRAILING NULLCOLS 

对于值为空的字段允许为空

(line_num  RECNUM ,

序号,自动生成,并不取自数据

seq_num  "cux_sqlldr_test_s.nextval" ,

取每条记录的第一个字段,此处应
为1..10,但是这里赋值序列。

代码

说明

column1 ,

column1

column2 ,

column2,表定义为非空字段,虽然上面
允许为空,但是如果该值为空,不能插入表种

column3 NULLIF (column3="column3_4"),

column3="column3_4"时候默认为空

show_column "UPPER(:show_column)" ,

大写列(调用UPPER大写函数)

hide_column  FILLER , 

FILLER 隐藏列

creation_date  DATE  'YYYY-MM-DD'

"CASE WHEN :creation_date is null THEN

TO_CHAR(sysdate,'YYYY-MM-DD') 

ELSE :creation_date END"

日期类型,格式为YYYY-MM-DD,为空的时候取系统日期

)

BEGINDATA

数据开始

*******

数据内容,默认每行一条记录

插入表的4种方式

insert,为缺省方式,在数据装载开始时要求表为空
append,在表中追加新记录
replace,(delete table) 删除旧记录,替换成新装载的记录
truncate,(truncate table)删除旧记录,替换成新装载的记录


10条数据由条件skip=3去除三条,因此上面命令运行结果是logic record count 7,查看 file文件夹下的log日记(log是不断叠加的,badfile是重新覆盖的)



从日志可以看出7条数据中,4条记录无法没导入的原因。

查看cux_sqlldr_test.bad,其中记录4条错误的数据。


(2)     在控制文件中不包涵数据.


上传cux_sqlldr_test.txt,cux_sqlldr_test.ctl至服务器,cux_sqlldr_test.txt由上面PLSQL脚本生成,cux_sqlldr_test.ctl如下

OPTIONS (skip=3,rows=128)

load data     

CHARACTERSET ZHS16GBK  

infile  "/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.txt"     

badfile  "/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.bad"

discardfile "/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.disc" 

TRUNCATE into table cux_sqlldr_test 

WHEN column1 != "column1_4"

Fields terminated by ","

Optionally enclosed by '"'

TRAILING NULLCOLS 

(

line_num  RECNUM ,

seq_num  "cux_sqlldr_test_s.nextval" ,

column1 ,

column2 "nvl(:column2,'***')",

column3 NULLIF (column3="column3_4"),

show_column "UPPER(:show_column)" ,

hide_column  FILLER , 

creation_date  DATE  'YYYY-MM-DD' "CASE WHEN :creation_date is null THEN TO_CHAR(sysdate,'YYYY-MM-DD')  ELSE :creation_date END"

)

运行命令

sqlldr userid=apps/appsjiahuicontrol=/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.ctl  log=$CUX_TOP/sqlldr/file/cux_sqlldr_test.log


100条数据由于skip = 3 从第4条开始处理变成97条,第四条数据由于WHEN column1 != "column1_4"

被丢弃在bad的cux_sqlldr_test.disc路径下,没有错误数据。查看表共96条数据,如下图所示:

 

 column2 "nvl(:column2,'***')", 对于 column2默认为 “***” .


其他

  此外,sqlload可以实现同时加载多个文件,同时把数据加载到多个表。

 参考网址:

http://www.cnblogs.com/jyzhao/p/4819884.html

http://m635674608.iteye.com/blog/1895316

http://blog.csdn.net/zq9017197/article/details/7352627

 



http://chatgpt.dhexx.cn/article/nriKauRi.shtml

相关文章

uchar 和 uchar3的疑惑

一直没有注意过,之前写代码都是用别的库,一直会遇到uchar或者uchar3,以为它在stl中的内置的类型,后面发现不是,其实它是别的库私下定义的(类似int3),详见opencv。 uchar它们在其中已…

安装另外一个版本keil5之后,出现许许多多的uchar未定义

新换了一台电脑。 结果就出现了很多很多问题,就是uchar突然不行。 一直在写宏定义, #define uchar unsigned char #define uint unsigned int #define ulong unsigned long 不成功,反倒错误越来越多,说是宏定义与之前的冲突。 后…

数据库之char vchar nchar nvchar的区别

首先介绍一下定长或变长 所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;有var前缀的,表示是实际存储空间是变长的,比如varchar,nvarchar变长字符数…

数据库中char varchar nchar nvarchar的区别

数据库中char varchar nchar nvarchar的区别 我们在进行数据库的设计的时候,很多情况下表中的字段都是用的是字符串类型的数据,其中就有四种选择char varchar nchar nvarchar,我们该如何进行? 四种类型的详细说明 char&#xff1…

【OpenCV】中saturate_castuchar的含义和用法是什么?

saturate_cast<uchar>主要是为了防止颜色溢出操作 原理大致如下 if(data<0) data0; elseif(data>255) data255;比如我们对像素进行线性操作。 <1> 不使用saturate_cast<uchar> //三个for循环&#xff0c;执行运算 g_dstImage(i,j) a*g_srcImage(i,j…

用cout输出uchar(unsigned char)变量时,没有输出结果怎么办?

在OpenCV中uchar实际上就是unsigned char&#xff0c;其定义如下&#xff1a; typedef unsigned char uchar;在图像处理中&#xff0c;我们经常用unsigned char代表我们的灰度值&#xff0c;因为灰度值的范围刚好是0~255嘛。 于是&#xff0c;习惯性地用久之后我们就容易真把…

opencv中 .at<uchar>()和.ptr<uchar>()使用方法的区别

opencv中 .at<uchar>&#xff08;&#xff09;和.ptr&#xff1c;uchar&#xff1e;&#xff08;&#xff09;使用方法的区别在opencv中&#xff0c;.at<uchar>&#xff08;&#xff09;和.ptr<uchar>&#xff08;&#xff09;都是获取像素值的函数&#xff…

char/uchar类型越限总结

我们在文章一和文章二中分析了char和uchar的取值范围和越限的情况。 总结&#xff1a; 1、char/uchar本质是保存的整型数&#xff0c;一个字节的整型数&#xff1b;//所谓的字符型&#xff0c;其实是将整型作为ascii码转换成的字符。 2、uchar的取值范围 十进制&#xff1a…

【机器学习】高斯混合模型详解

目录 1 引言2 高斯混合模型2.1 高斯分布2.2 高斯混合模型 3 高斯混合模型的求解4 参考文献 1 引言 高斯混合模型&#xff08;Gaussian Mixture Model, GMM&#xff09;是单一高斯概率密度函数的延伸&#xff0c;GMM能够平滑地近似任意形状的密度分布。学习高斯混合模型主要是因…

高斯混合模型聚类(GMM)matlab实现

Gaussian Mixture Model &#xff0c;就是假设数据服从 Mixture Gaussian Distribution &#xff0c;换句话说&#xff0c;数据可以看作是从数个 Gaussian Distribution 中生成出来的。实际上&#xff0c;我们在 K-means 和 K-medoids 两篇文章中用到的那个例子就是由三个 Gaus…

混合模型简介与高斯混合模型

高斯混合模型 混合模型概述 In statistics, a mixture model is a probabilistic model for representing the presence of subpopulations within an overall population, without requiring that an observed data set should identify the sub-population to which an indi…

GMM高斯混合模型

GMM高斯混合模型 一、GMM简介 GMM 全称是高斯混合模型&#xff0c;顾名思义&#xff0c;其本质就是将n个高斯模型混合叠加在一起&#xff0c;主要用处是用来作异常检测&#xff0c;聚类等&#xff1b;优点就是可解释性好&#xff0c;在低维数据上有着不错的效果&#xff1b; …

matlab构建高斯混合模型,使用matlab创建高斯混合模型及绘图

Matlab提供了根据几个独立的高斯模型创建Gaussian Mixture Model(GMM)的函数&#xff0c;即fitgmdist。关于该模型的具体使用方法以及绘制生成的GMM的图形的方法&#xff0c;如下代码所示&#xff1a; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%…

使用高斯混合模型的点云配准

最近在学习基于概率模型的点云配准方法&#xff0c;上一篇中学习的是基于NDT&#xff08;Normal Distribution Transform&#xff09;的点云配准方法&#xff0c;其中关键是将点云进行体素单元格划分&#xff0c;并将每个体素单元格用一个概率密度函数表示。 今天读了另一篇论…

sklearn之高斯混合模型

什么是高斯分布&#xff1f; 高斯分布也叫正态分布&#xff0c;也就是常态分布&#xff0c;什么意思呢&#xff1f;比如说男性的身高&#xff0c;假如说有10000个男性的身高&#xff0c;如果再坐标系上标记出来就是一个正态分布&#xff0c;如果形状还不是和上面的图形一样&am…

基于高斯混合模型的目标检测算法matlab仿真

目录 一、理论基础 二、核心程序 三、仿真结论 一、理论基础 高斯模型就是用高斯概率密度函数&#xff08;正态分布曲线&#xff09;精确地量化事物&#xff0c;将一个事物分解为若干的基于高斯概率密度函数&#xff08;正态分布曲线&#xff09;形成的模型。 对图像背景建立…

高斯混合模型 GMM 的详细解释

高斯混合模型&#xff08;后面本文中将使用他的缩写 GMM&#xff09;听起来很复杂&#xff0c;其实他的工作原理和 KMeans 非常相似&#xff0c;你甚至可以认为它是 KMeans 的概率版本。 这种概率特征使 GMM 可以应用于 KMeans 无法解决的许多复杂问题。 因为KMeans的限制很多…

高斯混合模型学习笔记

高斯混合模型学习笔记 根据师兄&#xff08;王延凯的博客&#xff09;以及其他博主大佬的总结学习高斯混合模型&#xff0c;自己也作一下学习记录。 目录 高斯混合模型学习笔记1、模型介绍2、模型求解步骤举个栗子通用背景模型UBM[\[2\]](https://blog.csdn.net/weixin_44278…

机器学习笔记之高斯混合模型(一)模型介绍

机器学习笔记之高斯混合模型——模型介绍 引言高斯混合模型介绍示例介绍从几何角度观察高斯混合模型从混合模型的角度观察 概率混合模型的引出从概率生成模型的角度观察高斯混合模型 引言 上一系列介绍了EM算法&#xff0c;本节将介绍第一个基于EM算法求解的概率生成模型——高…