注册
达梦数据复制软件DMDRS DRS语言使用:CVT脚本简介
专栏/数+融合专栏/ 文章详情 /

达梦数据复制软件DMDRS DRS语言使用:CVT脚本简介

达梦数+数据融合软件(DMDF)产品团队 2026/07/29 139 0 0
摘要 介绍DMDRS CVT功能和CVT脚本。

介绍达梦数据复制软件(简称DMDRS)的脚本语言(DRS语言)的使用,指导用户正确编写脚本实现相应的需求。

目前该语言主要应用于数据清洗转换模块CVT,主要围绕CVT模块功能展开介绍。

说明

DRS语言在语法上一定程度参考了PL/SQL,用法与其接近。

1 CVT简介

CVT数据清洗转换功能以数据库中记录行作为最小单元进行数据清洗转换,该功能基于DMDRS,在源DMDRS和目标DMDRS通过配置参数启用该功能。

1.1 支持转换的操作

CVT支持转换的操作同DMDRS支持的数据库操作。

  • DML操作

  • DDL操作(支持程度参考具体功能部分)

1.2 支持转换的数据类型

CVT支持转换的数据类型同DMDRS支持的数据类型,但是不包含以下数据类型:

  • 多媒体数据类型(如CLOB、BLOB)

  • XML结构化数据类型

  • 自定义数据类型

1.3 功能说明

CVT功能应用于源DMDRS的CPT模块和目标DMDRS的EXEC模块,通过编写用户自定义脚本,在发送或执行操作之前先进行数据清洗转换。

1.4 配置方法

在源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>

2 CVT脚本

当CVT脚本目录下存在多个脚本时,由于函数、全局变量等功能需要,需要按照一定顺序解析脚本。而且为了便于脚本的管理,将CVT脚本通过不同的后缀名分为以下几类,并且解析优先级从前往后递减。

  • 全局定义(*.glb):用于定义全局变量,同时做一些初始化、清理工作。

  • 函数定义(*.fn):用于定义用户封装的自定义函数。

  • 流程转换定义(*.cvt):用于定义同步表的数据清洗转换规则,是最主要的脚本文件。

说明

CVT不同类型脚本仅解析优先级不同,内容可以根据实际情况做调整。

如果需要单独禁用或忽略某一脚本,除了可以通过修改后缀名的方式以外,还可以在脚本开始处设置有效性标识。

语法

ENABLE: <TRUE|FALSE>

TRUE表示有效,FALSE表示无效,如果不指定,默认有效。

  • 脚本支持C/C++以及SQL语言风格的注释。

  • 语句块局部声明部分若无需求可以省略。

2.1 全局定义(*.glb)

全局定义由GLOBAL和CLEAN两个语句块组成,其中GLOBAL定义了全局变量,并在模块启动时执行初始化语句。而CLEAN在模块停止时执行清理语句。

说明

GLOBAL和CLEAN语句块分别最多定义一次,未定义时CVT将自动生成空的语句块。

语法

GLOBAL DECLARE ... --全局变量声明 BEGIN ... --初始化语句 END; CLEAN DECLARE ... --局部变量声明 BEGIN ... --清理语句 END;

2.2 函数定义(*.fn)

用于定义用户封装的自定义函数,增加脚本功能复用,同时使逻辑更加清晰。

语法

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;

2.3 流程转换定义(*.cvt)

流程转换定义的模式名、表名及对象名,支持位置不限的模糊匹配符(*)。

说明
  • 如果名称与CVT关键词冲突,或者名称中存在模糊匹配符(*)、空格或可能造成语义混乱的特殊字符,需要使用双引号包含。
  • 如果同一张表或对象匹配了多个流程转换语句块,将依次按解析顺序、分别对原始操作进行转换,流程之间无关联。
  • 名称大小写不敏感。

2.3.1 DML流程转换

将指定表的DML操作进行数据清洗转换,即根据需求,对输入操作op执行流程转换。

说明

输入操作op已隐藏,类型为DRS数据类型DRS.DML,详见后文。

语法

TABLE <模式名>.<表名> --省略输入参数(op DRS.DML) DECLARE ... --局部变量声明 BEGIN ... --流程转换语句 END;

示例

TABLE SYSDBA."*" --省略输入参数(op DRS.DML) BEGIN op.exec(); END;

2.3.2 DDL流程转换

将指定对象的DDL操作进行数据清洗转换,即根据需求,对输入操作op执行流程转换。

说明

输入操作op已隐藏,类型为DRS数据类型DRS.DDL,详见后文。

语法

OBJECT <模式名>.<对象名> --省略输入参数(op DRS.DDL) DECLARE ... --局部变量声明 BEGIN ... --流程转换语句 END;

示例

OBJECT SYSDBA."*" --省略输入参数(op DRS.DDL) BEGIN op.exec(); END;

2.3.3 XREC流程转换

基于DMNCDB-REDIS同步日志操作的流程转换。

语法

KEY <正则表达式> [SUBKEY <正则表达式>] --省略输入参数(op DRS.XREC) DECLARE ... --局部变量声明 BEGIN ... --流程转换语句 END;

示例

KEY "EMP:.+" SUBKEY ".*" --省略输入参数(op DRS.XREC) DECLARE ... --局部变量声明 BEGIN ... --流程转换语句 END;
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服