内容纲要
概要描述
transporter组件是星环出品的一款数据etl工具,支持从不同数据源获取数据,对数据的复杂转换操作,并最终将数据落地成不同格。
- 对于CLOB,如xml文本;BLOB,如jpg图片,tdt可以直接迁移到inceptor表。本文我们介绍如果使用tdt迁移Oracle中带blob字段的图片到相应的inceptor表。
详细说明
1. 上传图片,并对用户添加Utl_file权限
--定义生成文本的路径
> create or replace directory "FILEPATH" as '/home/oracle';
> grant read,write on directory FILEPATH to lkw;
> grant execute on utl_file to lkw;
--上传测试图片test_blob.jpg到对应的/home/oracle路径下,注意权限和属主
[oracle@321ed4c22025 /]$ ll /home/oracle/
total 244
drwxr-xr-x. 1 oracle oinstall 20 Aug 27 2014 app
-rw-r--r--. 1 oracle oinstall 246242 Sep 10 12:22 test_blob.jpg
[oracle@321ed4c22025 /]$
2. 新建一张包含blob类型字段的普通表
> drop table SY_QRTZ_JOB_DETAILS;
> create table SY_QRTZ_JOB_DETAILS (id int , name varchar2(255),JOB_DATA blob) ;
3. dbms_lob.loadfromfile方式加载blob数据
--导入
DECLARE
v_srcFile bfile;
b_lob BLOB;
BEGIN
--return a into b_lob将该列与一个blog类型的变量绑定在一起,以后只要为b_lob赋值,即等于将该值插入了表中
INSERT INTO SY_QRTZ_JOB_DETAILS
(id, name, JOB_DATA)
VALUES
(1, 'A', empty_blob()) RETURN JOB_DATA INTO b_lob;
--将文件转换为bfile
v_srcFile := bfilename('FILEPATH', 'test_blob.jpg');
dbms_lob.open(v_srcFile , dbms_lob.file_readonly);
-- 将b_file中的内容转换到b_lob
dbms_lob.loadfromfile(b_lob, v_srcFile , dbms_lob.getlength(v_srcFile));
dbms_lob.close(v_srcFile);
COMMIT;
END;
/
--检查图片是否正常展示
> select * from SY_QRTZ_JOB_DETAILS;
4. inceptor中创建对应表
> CREATE TABLE test_blob02
(
ID INT ,
NAME STRING,
JOB_DATA BINARY
);
5. transport组件定义数据流
JDBC READER:
INCEPTOR_WRITER
调试模式执行成功
后台实际的逻辑如下:
6. inceptor中执行查询
> SELECT * FROM test_blob02;