暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mogdb - 使用函数动态调用copy函数,进行批量数据导入

原创 伊织鸟 2022-10-20
342

简介

由于目前金融行业普通存在信创国产化需求,外围系统数据后台多转为以轻量级开源,国产化为主的数据库系统,但是由于核心迁移的风险性,核心系统仍多为DB2,Oracle等数据库,如果进行核心系统和外围系统数据交互,是信创环境目前面临的一个问题。

区别于复杂的ELT实现数据挖掘,或者付费第三方工具异构转换工具,通过文本文件可以轻松的实现异构数据库的数据沟通,存在风险低,技术含量低,无额外费用的优势,本文在此基础上,介绍一种可以基于Mogdb数据库动态加载文本文件到制定表的数据加载方式。

实现流程

1、创建测试数据

--创建测试表 create table t1 (id int); insert into t1 select generate_series(1,100); copy (select * from t1) to '/tmp/t1.dat' with (delimiter ',', encoding 'GBK'); copy (select * from t1) to '/tmp/t2.dat' with (delimiter ',', encoding 'UTF8');

图片.png

--创建导入表 create table gjyw.t2 as select * from gjyw.t1 where 1=0;

图片.png

2、配置参数

该参数可以使sysadmin权限的用户使用copy命令替代\copy命令

--配置参数 --参数说明: gs_guc reload -I all -N all -c "enable_copy_server_files=on"; gsql -d postgres -p 51000 -c "show enable_copy_server_files"

图片.png

3、创建函数

--创建函数 --函数实现通过制定多个参数,使用copy函数进行数据对制定表的数据导入 --exception异常抛出连用,否则会报错 create or replace procedure p_copy1(p_filename in varchar,p_tableschema in varchar,p_tablename in varchar,p_delimiter in varchar,p_encoding in varchar) package as declare v_sql varchar(2000); begin --p_filename:cvs文件名称 --p_tableschema:表的schema --p_tablename:表名 --p_delimiter:分隔符 --p_encoding:字符集 v_sql := 'copy '||p_tableschema||'.'||p_tablename||' from '''||p_filename||''' with (delimiter '''|| p_delimiter ||''',encoding '''||p_encoding||''');'; raise notice 'v_sql:%', v_sql; execute immediate v_sql; end; /

4、调用函数,并查看结果

--调用函数 call p_copy1('/tmp/t1.csv','gjyw','t2',',','GBK'); call p_copy1('/tmp/t2.csv','gjyw','t2',',','UTF8'); --查看数据 select count(*) from t2;

图片.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论