问题现象

在各个项目实施中,有时候会使用到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. influxdb得导出与导入

    转载请注明出处: 1.备份元数据 基本语法: influxd backup <path-to-backup> 备份元数据,没有任何其他参数,备份将只转移当前状态的系统元数据到path-to ...

  2. 内网穿透的高性能的反向代理应用FRP-自定义404错误页【实践可行版】

    frp简介 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公网. 为什 ...

  3. 基于Docker安装项目管理工具禅道

    禅道是通用的项目管理软件 完整支持敏捷项目模型.瀑布项目模型.看板模型 内置项目集.产品.项目和执行四个管理框架 支持CMMI标准的落地实施 下载镜像 docker pull easysoft/zen ...

  4. UE导入FBX、GLTF模型

    楔子 虽然做了很多年的三维可视化,不过都主要还是web端开发为主(webgl,threejs,有兴趣的读者也可以关注下我的相关专栏).最近准备入手一下UE,顺便做一下知识梳理. 所以文章可能都是比较粗 ...

  5. Java 网络编程(TCP编程 和 UDP编程)

    1. Java 网络编程(TCP编程 和 UDP编程) @ 目录 1. Java 网络编程(TCP编程 和 UDP编程) 2. 网络编程的概念 3. IP 地址 3.1 IP地址相关的:域名与DNS ...

  6. .NET Core 3.x 基于Autofac的AOP缓存

    一.依赖包 二.定义一个简单的缓存接口 /// <summary> /// 简单的缓存接口,只有查询和添加,以后会进行扩展 /// </summary> public inte ...

  7. OpenGL book note

    OpenGL Shading language 4.0vertex shader geometry shader: 格式解释 https://blog.csdn.net/hankern/article ...

  8. c++ 关于返回值、将亡值的调用研究

    c++11引入右值引用,而出现右值引用的有这几种:返回值(将亡值),常量. class Obj { public: Obj() { cout << "构造函数" < ...

  9. 【楔子】单细胞测序-最佳的分析Pipeline

    作者:starlitnightly 日期:2023.07.14 !!! note 楔子 从事单细胞分析也有一段时间了,国内大部分中文教程都是使用R语言进行分析,使用Python的还比较少,或者是直译s ...

  10. java面试一日一题:讲下ThreadLocal

    问题:请讲下ThreadLocal 分析:首先要了解ThreadLocal的基本原理:其次要理解ThreadLocal发生内存泄漏的原因:最后ThreadLocal是如何做到线程隔离的 回答要点: 主 ...