问题现象

在各个项目实施中,有时候会使用到yasldr工具进行csv数据的导入。关于yasldr一般的使用方法,官方文档已经有详细的介绍,具体可见:yasldr使用指导。但在涉及LOB类型的导入时,会有一些疑问,比如什么是lls模式、什么是lobfile模式等等。本文就关于如何使用yasldr导入lob类型做进一步说明,帮助大家理解。

问题的风险及影响

无风险

问题影响的版本

历史版本~23.2

问题发生原因

使用yasldr导入时,存在lob字段,往往需要多做一些处理。

33 解决方法及规避方式

不需要规避

问题分析和处理过程

背景假设

假设有一表table,表结构如下

table (C1 INT, C2 CLOB)

导入模式

三种导入方式。lls模式、lobfile模式和直接导入。

lls模式

LLS(Lob Location Specifier)模式,通过指定LLS关键词选择该导入模式。该模式选取数据文件的部分内容进行导入,且可指定从任意位置和任意长度开始导入。

指定了LLS关键字的目标表列字段映射的导入文件数据列格式需为filename.ext.nnn.mmm/:

  • filename.ext 为包含LOB或XMLTYPE数据的文件名称。

  • nnn 是文件中LOB数据的字节的偏移,仅允许为整数,且偏移量不允许超过数据文件大小且不允许为负数。

    • 当输入偏移量的值为正数时,实际偏移量 = 输入值 - 1。
    • 值为0时,实际偏移量 = 0。
    • 值为负数时返回错误。
  • mmm 是字节中的LOB或XMLTYPE的长度,仅允许为整数。值为-1时表示null,为0时表示导入一个空LOB或空XMLTYPE,不允许将其指定为小于-1的值。

  • 正斜杠(/)为终止字符,格式中必须包含该字符,否则报错。

--自行创建load_lls.csv文件,文件位于/home/yasdb目录下,内容假设为:
1,LOB_FILE.dat.1.2/
2,LOB_FILE.dat.2.3/ --于该目录下创建LOB_FILE.dat文件,内容假设为: abcde --LOB_FILE.dat.1.2/ 表示 导入文件列数据为 LOB_FILE.dat.1.2/,意为从LOB_FILE.dat文件的偏移为0的位置为起始,截取长度为2的数据内容进行导入,正斜杠表示终止。 --LOB_FILE.dat.2.3/ 表示 导入文件列数据为 LOB_FILE.dat.2.3/,意为从LOB_FILE.dat文件的偏移为1的位置为起始,截取长度为3的数据内容进行导入,正斜杠表示终止。 --导入命令为:
LOAD DATA OPTIONS (degree_of_parallelism=3) INFILE 'home/yasdb/load_lls.csv' INTO TABLE sqlldr_lob(c1, c2 LLS);

辅助理解

lls导入lob的数据是需要完整放在一个.dat里的,比如:

abcde
abcde
abcde
abcde
abcdef
abc
a
ab

在导入数据时,INFILE指的是一张表的csv数据,其中lob字段的数据通过 filename.ext.nnn.mmm/ 这样的格式来指定。比如:(以上面的示例数据为例)

"1","LOB_FILE.dat.1.5/"
"2","LOB_FILE.dat.7.5/"
"3","LOB_FILE.dat.13.5/"
"4","LOB_FILE.dat.19.5/"
"5","LOB_FILE.dat.25.6/"
"6","LOB_FILE.dat.32.3/"
"7","LOB_FILE.dat.36.1/"
"8","LOB_FILE.dat.38.2/"

在导入时指定列为lls即可识别 c2 LLS,这里注意一个点:在计算偏移量的适合要考虑换行符的存在。

LOAD DATA OPTIONS (degree_of_parallelism=3) INFILE 'home/yasdb/load_lls.csv' INTO TABLE sqlldr_lob(c1, c2 LLS);

lobfile模式

该模式下通过引用FILLER伪列指向的LOB或XMLTYPE数据文件,将整个文件导入至目标表指定的列中

--需要导入的csv数据文件:
"1","LOB0000/00000000_0001.dat"
"2","LOB0000/00000000_0002.dat"
"3","LOB0000/00000000_0003.dat" --00000000_0001.dat 里的一行或者一个clob类型的数据 也就是一个lob数据一个文件
aaaasa --00000000_0002.dat 里的一行或者一个clob类型的数据
bbbbb --00000000_0003.dat里的一行或者一个clob类型的数据
cccccc --导入命令
LOAD DATA INFILE 'home/yasdb/load_lls.csv' INTO TABLE sqlldr_lob(col1,file1 filler,col2 lobfile(file1) terminated BY eof);

导入命令理解

col1,file1 filler,col2 lobfile(file1)

col1是第一列的int,file1是一个伪劣的名字,filler关键字说明了这一列是伪列。col2 lobfile(file1)表明col2 列才是表中真实存在的列,其用lobfile导入。col2和file1列是一种映射关系。

辅助理解

lobfile模式就是一行lob数据就存一个.dat文件,如果有1kw行,那就是1kw个.dat文件。然后在导入的csv文件里 用代表这一行lob数据的 .dat文件来占位即可。比如:

"1","/00000000_0001.dat"

lls和lobfile区别

lls模式和lobfile模式的区别就是前者只有一个.dat文件来存放lob数据,在csv中通过偏移量的计算来指定每行需要导入的lob数据。后者就是一个lob数据就是一个.dat文件,1百万行数据那就是有1百万个.dat文件,在csv中直接在lob列指定对应的.dat类型即可。

直接导入

可以直接在csv中对应列放lob数据导入。比如:

"1","asdasdasfdfgasdasd"
"2","sdasdfafgadggfg"
"3","3124sasasasd"
.....

限制:单个字段不超过32K

【YashanDB知识库】如何使用yasldr导入lob类型?的更多相关文章

  1. LOB类型的学习、总结

    LOB相关的概念 LOB类型: 将信息文件(十进制.二进制).图像甚至音频信息采用数据库作为保存载体时,就需要使用lob类型数据. 有两种Lob,Internal Lob和External Lob.I ...

  2. 转换CLOB字段类型为VARCHAR2, lob类型不支持的sql语句

    转自:https://blog.csdn.net/e_wsq/article/details/7561209 步骤: 1.建立一个临时varchar2字段用来保存数据 2.将clob的内容截取后更新到 ...

  3. 移动lob类型索引到指定表空间

    WWWNEWSAD 为表名 USERS 为原表空间 CONTENT 为lob类型的字段 DATA_INDEX_WXZJ 指定的表空间 ALTER TABLE WWWNEWSAD MOVE TABLES ...

  4. Oracle LOB类型

    一.Oracle中的varchar2类型1.我们在Oracle数据库存储的字符数据一般是用VARCHAR2.VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Dat ...

  5. oracle--导出、导入blob类型的字段

    blob是oracle中的一个数据类型,保存的是压缩后的二进制形式的大数据. 数据迁移如果涉及到blob字段,都不好处理,因为无法用常规方法进行操作,如:使用select查看该字段,也无法用inser ...

  6. oracle中 lob类型

    LOB大型对象(大数据字段类型) 分为:-BLOB: Binary 二进制大型对象 ,适用于存非文本型数据(程序,图像,影音) -CLOB:Character  字符型大型对象,适用于存储文本型数据( ...

  7. 写入和读取LOB类型的对象

    ====写入数据============ create or replace procedure addWaterFallis directions clob; amount binary_integ ...

  8. 如何在R中导入不同类型的数据

    这个表格是我在datacamp学习R导入文件的课程的归纳 遇到的问题及解决方法(环境: Rv3.2.5,win7,32位) 1. 使用gdata中的read.xls时提示找不到Perl路径 >l ...

  9. 导入Excel 类型的数据

    thinkphp 访问此控制方法就可以导入了 //数据导入 public function impUser(){ if (!empty($_FILES)) { $upload = new \Think ...

  10. MYSQL导入csv类型的数据出现The MySQL server is running with the --secure-file-priv option

    今天尝试使用 into outfile导出数据的时候出现错误: The MySQL server is running with the --secure-file-priv option so it ...

随机推荐

  1. microsoft office object版本对应offices版本

    1997年 Excel 97 Microsoft Excel 8.0 1999年 Excel 2000 Microsoft Excel 9.0 2001年 Excel XP Microsoft Exc ...

  2. 个人使用 sudo 方法

    sudo 作用:允许 系统管理员 授予某些用户或用户组以 其他用户身份 运行某些或所有命令的权限 su 用于变更为其他使用者的身份的命令,一般需要键入该使用者的密码 sudo 则是对 su 使用的简化 ...

  3. Django 处理http请求之使用session

    Django 处理http请求之使用session by:授客 QQ:1033553122 欢迎加入全国软件测试交流群:7156436 测试环境 Win7 Django 1.11   Django提供 ...

  4. redis实现分片集群

    为什么要使用分片集群? 主从和哨兵可以解决高可用.高并发读的问题.但是仍存在海量数据存储.高并发写问题 分片集群特征: 集群中有多个master,每个master保存不同数据. 为master置备了后 ...

  5. lambda表达式用法

    (参数列表)->{代码块}; (int a,int b)->{return a+b;}; 本质为匿名函数 参数的类型可以省略: (a,b)->{return a+b;} 当参数只有一 ...

  6. docker nginx容器的均衡负载

    创建三个docker容器以实现nginx的负载均衡 编写nginx的dockfile [root@docker nginx]# cat Dockerfile FROM nginx RUN echo ' ...

  7. sqoop 从数据库导入数据到hdfs

    前提 配置hadoop配置文件 前提 启动hadoop 配置hive 改名进入sqoop/conf 增加环境变量 tar xf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz ...

  8. 【BatchProgram】 读取文本批量创建目录

    NameList.txt文件内容 FILE-NAME-A FILE-NAME-B FILE-NAME-C ... 根据上面文件批量创建对应的目录,且附加序号 CMD代码: @ECHO OFF SETL ...

  9. 【Maven】概念知识

    怎么在Windows安装Maven https://www.cnblogs.com/mindzone/p/12701416.html 学到一个新的指令:查看相对系统变量 echo %XXX_HOME% ...

  10. Webots —— 好用的人形机器人仿真平台

    相关: https://cyberbotics.com/doc/guide/tutorials 下载地址: https://github.com/cyberbotics/webots/releases ...