介绍达梦数据复制软件(简称DMDRS)的脚本语言(DRS语言)的使用,指导用户正确编写脚本实现相应的需求。
目前该语言主要应用于数据清洗转换模块CVT,主要围绕CVT模块功能展开介绍。
说明DRS语言在语法上一定程度参考了PL/SQL,用法与其接近。
CVT数据清洗转换功能以数据库中记录行作为最小单元进行数据清洗转换,该功能基于DMDRS,在源DMDRS和目标DMDRS通过配置参数启用该功能。
CVT支持转换的操作同DMDRS支持的数据库操作。
DML操作
DDL操作(支持程度参考具体功能部分)
CVT支持转换的数据类型同DMDRS支持的数据类型,但是不包含以下数据类型:
多媒体数据类型(如CLOB、BLOB)
XML结构化数据类型
自定义数据类型
CVT功能应用于源DMDRS的CPT模块和目标DMDRS的EXEC模块,通过编写用户自定义脚本,在发送或执行操作之前先进行数据清洗转换。
在源DMDRS配置文件的cpt标签或目标DMDRS配置文件的exec标签下增加cvt_dir参数,用来指定CVT脚本所在的目录,DMDRS会解析该目录下所有名称合法的文件。
参数示例
源DMDRS
<cpt>
...
<cvt_dir>E:\cpt_cvt</cvt_dir>
...
</cpt>
目标DMDRS
<exec>
...
<cvt_dir>E:\exec_cvt</cvt_dir>
...
</exec>
当CVT脚本目录下存在多个脚本时,由于函数、全局变量等功能需要,需要按照一定顺序解析脚本。而且为了便于脚本的管理,将CVT脚本通过不同的后缀名分为以下几类,并且解析优先级从前往后递减。
全局定义(*.glb):用于定义全局变量,同时做一些初始化、清理工作。
函数定义(*.fn):用于定义用户封装的自定义函数。
流程转换定义(*.cvt):用于定义同步表的数据清洗转换规则,是最主要的脚本文件。
说明CVT不同类型脚本仅解析优先级不同,内容可以根据实际情况做调整。
如果需要单独禁用或忽略某一脚本,除了可以通过修改后缀名的方式以外,还可以在脚本开始处设置有效性标识。
语法
ENABLE: <TRUE|FALSE>
TRUE表示有效,FALSE表示无效,如果不指定,默认有效。
脚本支持C/C++以及SQL语言风格的注释。
语句块局部声明部分若无需求可以省略。
全局定义由GLOBAL和CLEAN两个语句块组成,其中GLOBAL定义了全局变量,并在模块启动时执行初始化语句。而CLEAN在模块停止时执行清理语句。
说明GLOBAL和CLEAN语句块分别最多定义一次,未定义时CVT将自动生成空的语句块。
语法
GLOBAL DECLARE
... --全局变量声明
BEGIN
... --初始化语句
END;
CLEAN DECLARE
... --局部变量声明
BEGIN
... --清理语句
END;
用于定义用户封装的自定义函数,增加脚本功能复用,同时使逻辑更加清晰。
语法
FUNCTION <函数名> (<参数1>, ...)
[RETURN <返回值类型>] --无返回值时可省略
DECLARE
... --局部变量声明
BEGIN
... --执行语句
END;
示例
FUNCTION my_max (a NUMBER, b NUMBER)
RETURN NUMBER
BEGIN
IF a > b THEN
RETURN a;
ELSE
RETURN b;
END IF;
END;
FUNCTION my_max_ex (a NUMBER, b NUMBER, c NUMBER)
RETURN NUMBER
DECLARE
tmp NUMBER;
BEGIN
tmp := my_max(a, b);
RETURN my_max(tmp, c);
END;
流程转换定义的模式名、表名及对象名,支持位置不限的模糊匹配符(*)。
说明
- 如果名称与CVT关键词冲突,或者名称中存在模糊匹配符(*)、空格或可能造成语义混乱的特殊字符,需要使用双引号包含。
- 如果同一张表或对象匹配了多个流程转换语句块,将依次按解析顺序、分别对原始操作进行转换,流程之间无关联。
- 名称大小写不敏感。
将指定表的DML操作进行数据清洗转换,即根据需求,对输入操作op执行流程转换。
说明输入操作op已隐藏,类型为DRS数据类型DRS.DML,详见后文。
语法
TABLE <模式名>.<表名> --省略输入参数(op DRS.DML)
DECLARE
... --局部变量声明
BEGIN
... --流程转换语句
END;
示例
TABLE SYSDBA."*" --省略输入参数(op DRS.DML)
BEGIN
op.exec();
END;
将指定对象的DDL操作进行数据清洗转换,即根据需求,对输入操作op执行流程转换。
说明输入操作op已隐藏,类型为DRS数据类型DRS.DDL,详见后文。
语法
OBJECT <模式名>.<对象名> --省略输入参数(op DRS.DDL)
DECLARE
... --局部变量声明
BEGIN
... --流程转换语句
END;
示例
OBJECT SYSDBA."*" --省略输入参数(op DRS.DDL)
BEGIN
op.exec();
END;
基于DMNCDB-REDIS同步日志操作的流程转换。
语法
KEY <正则表达式> [SUBKEY <正则表达式>] --省略输入参数(op DRS.XREC)
DECLARE
... --局部变量声明
BEGIN
... --流程转换语句
END;
示例
KEY "EMP:.+" SUBKEY ".*" --省略输入参数(op DRS.XREC)
DECLARE
... --局部变量声明
BEGIN
... --流程转换语句
END;
文章
阅读量
获赞
