GBase 8s 中CLOB的数据迁移

本文详细介绍了如何在GBase8s中处理大文本对象CLOB,包括创建测试数据、导出用户和CLOB数据到文件、导入数据以及更新CLOB字段。重点展示了CLOB数据的存储方式和迁移操作步骤。

在GBase 8s中可以存储大文本对象CLOB,最大可以支持4T大小。

对于GBase 8s中的CLOB,不同于MySQL中的MediumBlob(最大支持16M),不能通过INSERT方式,直接对记录进行插入操作,因此当一些应用使用CLOB存储配置信息时,可能遇到如何方便的进行数据库部署和初始化数据问题。

由于CLOB的最大值为4T,不能将这么大的数据直接嵌入到SQL语句中(过大的SQL语句可能导致数据库正常运行问题,通常会对SQL语句的大小进行限制),GBase 8s采用了将CLOB数据保存在操作系统的文件中,在执行时,动态从操作系统文件读取数据,并保存在数据库中表的对应字段中。

下面的示例演示如何在GBase 8s中对大文本对象CLOB进行导出和导入。

生成CLOB测试数据

创建演示用的文本文件

[gbasedbt@train ~]$ pwd
/home/gbasedbt
[gbasedbt@train ~]$ mkdir user_doc
[gbasedbt@train ~]$ echo "Hello world" > user_doc/1.txt
[gbasedbt@train ~]$ echo "Happy new year" > user_doc/2.txt
[gbasedbt@train ~]$ echo "Every body" > user_doc/3.txt
[gbasedbt@train ~]$ ls user_doc
1.txt  2.txt  3.txt
[gbasedbt@train ~]$

在上面的操作中,创建了一个user_doc的目录,并创建了三个文件,分别为1.txt,2.txt,3.txt。

创建演示表

[gbasedbt@train ~]$ dbaccess - -
Your evaluation license will expire on 2022-06-09 12:00:00
> database mydb;

Database selected.

> create table t_user1(f_userid int, f_username varchar(20), f_attachment clob) put f_attachment in (sbspace1);

Table created.

> create table t_user2(f_userid int, f_username varchar(20), f_attachment clob) put f_attachment in (sbspace1);

Table created.

> insert into t_user1 values(1, 'tom', filetoclob('user_doc/1.txt', 'client'));

1 row(s) inserted.

> insert into t_user1 values(2, 'mike', filetoclob('user_doc/2.txt', 'client'));

1 row(s) inserted.

> insert into t_user1 values(3, 'rose', filetoclob('user_doc/3.txt', 'client'));

1 row(s) inserted.

> select * from t_user1;



f_userid      1
f_username    tom
f_attachment
Hello world


f_userid      2
f_username    mike
f_attachment
Happy new year


f_userid      3
f_username    rose
f_attachment
Every body


3 row(s) retrieved.

>

从GBase 8s中导出数据

导出用户数据

> !pwd
/home/gbasedbt
> !mkdir user_data

> unload to 'user_data/user1.txt' select f_userid, f_username, null as f_photo from t_user1;

3 row(s) unloaded.

> !cat user_data/user1.txt
1|tom||
2|mike||
3|rose||
>

导出CLOB数据到文件

> !mkdir user_clob

> select lotofile(f_attachment, concat(concat('user_clob/', f_username), '.txt!'), 'client') from t_user1;



(expression)  user_clob/tom.txt

(expression)  user_clob/mike.txt

(expression)  user_clob/rose.txt

3 row(s) retrieved.

> !ls user_clob
mike.txt  rose.txt  tom.txt
>

注意:在导出文件命名时,要以!进行结尾,不然GBase 8s会自动在文件名后加上后缀,以防止文件重名。

导入数据和CLOB到GBase 8s

导出数据

> load from 'user_data/user1.txt' insert into t_user2;

3 row(s) loaded.

> select * from t_user2;



f_userid      1
f_username    tom
f_attachment

f_userid      2
f_username    mike
f_attachment

f_userid      3
f_username    rose
f_attachment

3 row(s) retrieved.

>

使用文件更新表中CLOB字段

> update t_user2 set f_attachment = filetoclob(concat(concat('user_clob/', f_username), '.txt'), 'client');

3 row(s) updated.

> select * from t_user2;



f_userid      1
f_username    tom
f_attachment
Hello world


f_userid      2
f_username    mike
f_attachment
Happy new year


f_userid      3
f_username    rose
f_attachment
Every body


3 row(s) retrieved.

>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值