本章节为使用者介绍多发比对配置相关内容。

9.3.1. 多发配置管理

9.3.1.1. 多发配置文件 jrescloud.properties 配置说明

参数(值)

说明

示例

是否可运行修改

应用范围

multi.sendCompareService

是否发送到比对服务(总开关),默认0不发送到比对服务,取值范围[0,1]

multi.sendCompareService=1

不限制

multi.run.what

0:不执行自动化和多发 1:执行自动化测试 2:执行多发(关联多发的源库(oracle或者mysql)的jdbcUrl中查询参数mode=MULTIPLEX) 3:执行自动化+多发(关联多发的源库(oracle或者mysql)的jdbcUrl中查询参数mode=MULTIPLEX)

multi.run.what=2

不限制

multi.pulsarServiceUrl

Pulsar服务端地址,格式为:pulsar://<ip>:<port> 样例数据:pulsar://10.20.47.203:6650

multi.pulsarServiceUrl=pulsar://127.0.0.0:6650

不限制

multi.topicName

Pulsar的持久化主题,主题格式:persistent://<tenant>/<namespace>/<topic>,样例数据为:persistent://public/default/recordMonitorJingji

multi.topicName=persistent://public/default/multiplex

不限制

multi.subscriptionName

在Pulsar中,订阅(Subscription)是用于消费主题消息的标识符。订阅名称是用来标识不同消费者或消费组在订阅相同主题时的唯一标识。合法字符串即可,比如jingjiTest

multi.subscriptionName=multiplexSubscription

不限制

multi.send.change.data.http.url

http请求上送sql执行前后数据变化到到比对服务的url,默认值为空,url格式为http://ip:port/em/compare/upload/change/data

multi.send.change.data.http.url=http://10.188.141.212:17333/em/compare/upload/change/data

不限制

9.3.1.2. jrescloud.properties 配置说明

多发数据源配置文件jrescloud.properties中的参数配置以key=value形式存在。 多发数据源配置以该格式为前缀:multiplex.datasource.${targetDialect}.${configProperty},其中 ${targetDialect} 表示目标方言,当前支持 lightdb_oracle、gaussdb_oracle、ocean_base_oracle、dm。${configProperty} 表示连接参数配置,当前支持 url、username、password。

参数(值)

说明

示例

是否可运行修改

应用范围

url

启用unisql代理的多发目标数据库连接串

multiplex.datasource.lightdb_oracle.url=jdbc:postgresql://10.20.30.218:5432/postgres?sourceDialect=oracle&targetDialect=lightdb_oracle&options=-c%20search_path=public

不限制

username

用于连接多发目标数据库的用户名

multiplex.datasource.lightdb_oracle.username=USERNAME

不限制

password

用于连接多发目标数据库的密码

multiplex.datasource.lightdb_oracle.password=PASSWORD

不限制

9.3.2. 比对配置管理

9.3.2.1. 配置文件

比对服务配置文件 jrescloud.propertiescomparison/deploy/config 文件夹下,供比对服务初始化加载调用。

9.3.2.2. 配置文件说明

比对服务配置文件jrescloud.properties中的参数配置以key=value形式存在

9.3.2.2.1. 比对服务通用配置

app通常指的是一个独立的服务实例,负责处理特定的业务需求

参数(值)

说明

示例

是否可运行修改

应用范围

app.web.domain

表示 Web 应用程序的域名

app.web.domain=ip; #ip要替换成实际部署比对服务的机器ip

不限制

app.web.home

表示应用程序的主页或根路径

app.web.home=http://ip:17334/em; #ip要替换成实际部署比对服务的机器ip

不限制

9.3.2.2.2. 比对服务数据源配置

参数(值)

说明

示例

是否可运行修改

应用范围

name

多数据源[0]的名称

dyn.spring.datasources[0].name=default

不限制

driverClassName

驱动类名称

dyn.spring.datasources[0].driverClassName=org.postgresql.Driver

不限制

url

数据库连接地址

dyn.spring.datasources[0].url=jdbc:postgresql://10.20.165.223:5434/em

不限制

username

数据库用户名

dyn.spring.datasources[0].username=USERNAME

不限制

password

数据库密码

dyn.spring.datasources[0].password=PASSWORD

不限制

9.3.2.3. 比对规则说明

9.3.2.3.1. 比对规则配置文件位置

比对规则文件(*.json)位于目录 ``comparison/config/compareRules`` 下与比对服务配置文件 ``jrescloud.properties`` 同一层。
规则文件(*.json)中一行(json格式)表示一条规则

9.3.2.3.2. 为什么使用比对规则

1 确保准确性。
    比对规则确保在比对过程中数据能够被正确解释和处理。例如,不同格式的日期需要标准化,不同精度的数值需要统一处理,通过规则来实现这些目标,能够确保比对的准确性。
2 处理数据格式和类型差异。
    数据可能来自不同的源,不同源之间的数据格式和类型可能有所不同。比对规则能够处理这些差异,例如:
    将日期格式标准化(如从DD/MM/YYYY格式转换为YYYY-MM-DD格式)。
    统一处理布尔值(如将1/0转换为true/false)。
3 处理异常。
    数据中可能包含异常值。比对规则能定义如何处理这些情况(如赋予默认值),避免错误比对。
4 提高比对效率
    明确的比对规则可以提升比对过程的效率。例如,通过定义快速判断的标准来进行初步筛选,减少详细比对的工作量。
5 自动化
    使用比对规则使比对过程自动化,减少人工操作和错误。

9.3.2.3.3. 比对规则分类和样例

9.3.2.3.3.1. 规则内容说明

属性

说明

示例

ruleName

规则名称

ForceIgnore(忽略大小规则),ForceReplace(替换规则),字符串截取规则(SubString),精度截取规则(SubPrecision),布尔转数字(Boolean2Number),时间戳转字符串(Timestamp2String)规则

columnType

字段类型

varchar(注意这里的字段类型是来自jdbc获取的字段的元数据类型)

tableName

表名

example_table_six_rule

ruleColumns

应用规则的字段数组

“ruleColumns”:[“name”,”Aa”]

ruleValue

应用[替换规则,字符串截取规则,精度截取规则]规则后的值

替换规则,”ruleValue”: 100表示应用规则后替换的值为100。字符串截取规则,”ruleValue”: 4表示截取字符串前4个字符。精度截取规则,”ruleValue”: 5表示保留小数点后5位(四舍五入)

dateFormat

应用[时间戳转字符串]规则后,日期时间格式

“dateFormat”:”yyyy-MM-dd”表示转后的日期格式

9.3.2.3.3.2. 比对规则配置说明

可以针对不同的业务需求灵活地应用特定规则,从而提升数据处理的准确性和效率。

1 只进行字段类型的规则匹配。
2 只进行表名的规则匹配。
3 只进行列名的规则匹配。
4 字段类型+表名的规则匹配。
5 字段类型+列名的规则匹配。
6 表名+列名的规则匹配。
7 字段类型+表名+列名的规则匹配。
具体比对规则样例见下方。

备注

  • 支持运行时修改比对规则,修改规则文件后,在规则配置文件目录下(工作目录下的/config/compareRules下)创建一个文件名是 compareRules.reload 的文件,即可重新加载规则(每隔1分钟检查一次)。

  • 重新加载规则后,会将历史的数据根据新规则重新比对并生成报告,历史报告不会丢失。

9.3.2.3.3.3. 忽略大小规则(ForceIgnore)

该忽略大小写规则旨在确保输入字符串内容在处理过程中统一转换为小写形式,从而实现大小写不敏感的效果

 样例1:
 # 字段类型是varchar,该字段内容应用忽略大小写规则(转换为小写)
{"ruleType":"ColumnTypeRule","ruleName":"ForceIgnore","columnType":"varchar"}

 样例2:
 # 对表example_table_six_rule字段[name,Aa]内容应用忽略大小写规则(转换为小写)
 {"ruleType":"ColumnTypeRule","ruleName":"ForceIgnore","tableName":"example_table_six_rule","ruleColumns":["name","Aa"]}

 样例3:
 # 对表tb_rpa_node_1字段[scheduler_paused_1,Aa]且该字段类型是varchar,该字段内容应用忽略大小写规则(转换为小写)
 {"ruleType":"ColumnTypeRule","ruleName":"ForceIgnore","columnType":"varchar","tableName":"tb_rpa_node_1","ruleColumns":["scheduler_paused_1","Aa"]}

9.3.2.3.3.4. 替换规则(ForceReplace)

用于将数据替换为另一部分内容。

 样例1:
 # 字段类型是varchar,该字段内容应用替换规则返回替换后的值
{"ruleType":"ColumnTypeRule","ruleName":"ForceReplace","columnType":"varchar","ruleValue": "替换后的值"}

 样例2:
 # 对表example_table_six_rule字段[company,Aa]内容应用替换规则,替换后的值为100
 {"ruleType":"ColumnTypeRule","ruleName":"ForceReplace","tableName":"example_table_six_rule","ruleColumns":["company","Aa"],"ruleValue": 100}

 样例3:
 # 对表example_table_six_rule字段[company,Aa]且该字段类型为int4(jdbc获取字段的元数据类型),对该字段内容应用替换规则,替换后的值为100
 {"ruleType":"ColumnTypeRule","ruleName":"ForceReplace","columnType":"int4","tableName":"example_table_six_rule","ruleColumns":["company","Aa"],"ruleValue": 100}

 样例4:
 # 对字段[hire_day_of_week]且该字段类型为text(jdbc获取字段的元数据类型),则对该字段内容应用替换规则,将旧值[星期一]替换为[MONDAY],字段值不匹配时不替换
 {"ruleName":"ForceReplace","columnType":"text","ruleColumns":["hire_day_of_week"],"ruleValue": "星期一:MONDAY"}

9.3.2.3.3.5. 字符串截取规则(SubString)

从输入字符串中截取指定长度的子串

样例1:
# 字段类型是varchar,该字段内容应用字符串截取规则,截取字符串前3位
{"ruleType":"ColumnTypeRule","ruleName":"SubString","columnType":"varchar","ruleValue": 3}

样例2:
# 对表example_table_six_rule字段[address,Aa]内容应用字符串截取规则,截取字符串前3位
{"ruleType":"ColumnTypeRule","ruleName":"SubString","tableName":"example_table_six_rule","ruleColumns":["address","Aa"],"ruleValue": 3}

样例3:
# 对表tb_rpa_node_substring字段[scheduler_paused_substring,Aa]且该字段类型为varchar,对该字段内容应用字符串截取规则,截取字符串前3位
{"ruleType":"ColumnTypeRule","ruleName":"SubString","columnType":"varchar","tableName":"tb_rpa_node_substring","ruleColumns":["scheduler_paused_substring","Aa"],"ruleValue": 3}

9.3.2.3.3.6. 精度截取规则(SubPrecision)

将数值小数部分精确到指定的位数(四舍五入),该规则用于保证数值精度在特定应用场景下的一致性和准确性。

样例1:
# 字段类型是float8(jdbc获取到表字段元数据),该字段内容应用精度截取规则,小数点后保留4位(四舍五入)
{"ruleType":"ColumnTypeRule","ruleName":"SubString","columnType":"float8","ruleValue": 4}

样例2:
# 对表example_table_six_rule字段[money,Aa]内容应用精度截取规则,小数点后保留4位(四舍五入)
{"ruleType":"ColumnTypeRule","ruleName":"SubPrecision","tableName":"example_table_six_rule","ruleColumns":["money","Aa"],"ruleValue": 4}

样例3:
# 对表example_table_six_rule字段[money,Aa]且该字段类型为float8,内容应用精度截取规则,小数点后保留4位(四舍五入)
{"ruleType":"ColumnTypeRule","ruleName":"SubPrecision","columnType":"float8","tableName":"example_table_six_rule","ruleColumns":["money","Aa"],"ruleValue": 4}

9.3.2.3.3.7. 布尔转数字(Boolean2Number)规则

将true转成1,将false转成0

 样例1:
 # 字段类型是bit(jdbc获取到表字段元数据),将true转成1,将false转成0
 {"ruleType":"ColumnTypeRule","ruleName":"Boolean2Number","columnType":"bit"}

 样例2:
 # 对表example_table_six_rule字段[true_or_false,Aa] 将true转成1,将false转成0
{"ruleType":"ColumnTypeRule","ruleName":"Boolean2Number","tableName":"example_table_six_rule","ruleColumns":["true_or_false","Aa"]}

 样例3:
 # 对表example_table_six_rule字段[money,Aa]且该字段类型为bit,将true转成1,将false转成0
{"ruleType":"ColumnTypeRule","ruleName":"Boolean2Number","columnType":"bit","tableName":"example_table_six_rule","ruleColumns":["true_or_false","Aa"]}

9.3.2.3.3.8. 时间戳转字符串(Timestamp2String)规则

它将数值类型的时间戳(通常为毫秒数)转换为格式化的日期字符串。

 样例1:
 # 字段类型是timestamp(jdbc获取到表字段元数据),字段名是create_time,内容应用时间戳转字符串规则,默认转换后格式为yyyy-MM-dd HH:mm:ss
 {"ruleType":"ColumnTypeRule","ruleName":"Timestamp2String","columnType":"timestamp","ruleColumns":["create_time"]}

 样例2:
 # 字段类型是timestamp(jdbc获取到表字段元数据),字段名是update_time,内容应用时间戳转字符串规则,默认转换后格式为yyyy-MM-dd
{"ruleType":"ColumnTypeRule","ruleName":"Timestamp2String","dateFormat":"yyyy-MM-dd", "columnType":"timestamp","ruleColumns":["update_time"]}