【YashanDB 知识库】如何使用 yasldr 导入 lob 类型?
问题现象
在各个项目实施中,有时候会使用到 yasldr 工具进行 csv 数据的导入。关于 yasldr 一般的使用方法,官方文档已经有详细的介绍,具体可见:yasldr使用指导。但在涉及 LOB 类型的导入时,会有一些疑问,比如什么是 lls 模式、什么是 lobfile 模式等等。本文就关于如何使用 yasldr 导入 lob 类型做进一步说明,帮助大家理解。
问题的风险及影响
无风险
问题影响的版本
历史版本~23.2
问题发生原因
使用 yasldr 导入时,存在 lob 字段,往往需要多做一些处理。
33 解决方法及规避方式
不需要规避
问题分析和处理过程
背景假设
假设有一表 table,表结构如下
导入模式
三种导入方式。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 的值。
正斜杠(/)为终止字符,格式中必须包含该字符,否则报错。
辅助理解:
lls 导入 lob 的数据是需要完整放在一个.dat 里的,比如:
在导入数据时,INFILE 指的是一张表的 csv 数据,其中 lob 字段的数据通过 filename.ext.nnn.mmm/ 这样的格式来指定。比如:(以上面的示例数据为例)
在导入时指定列为 lls 即可识别 c2 LLS,这里注意一个点:在计算偏移量的适合要考虑换行符的存在。
lobfile 模式
该模式下通过引用 FILLER 伪列指向的 LOB 或 XMLTYPE 数据文件,将整个文件导入至目标表指定的列中
导入命令理解
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 文件来占位即可。比如:
lls 和 lobfile 区别
lls 模式和 lobfile 模式的区别就是前者只有一个.dat 文件来存放 lob 数据,在 csv 中通过偏移量的计算来指定每行需要导入的 lob 数据。后者就是一个 lob 数据就是一个.dat 文件,1 百万行数据那就是有 1 百万个.dat 文件,在 csv 中直接在 lob 列指定对应的.dat 类型即可。
直接导入
可以直接在 csv 中对应列放 lob 数据导入。比如:
限制:单个字段不超过 32K
评论