数据加工
数据复制服务支持对同步的对象进行加工,即可以为选择的对象添加规则。各链路支持的加工规则不一样,目前仅部分链路支持数据加工,支持数据加工链路参考表1,具体操作方法可参考对应的内容。
同步方向 |
数据流向 |
数据过滤 |
附加列 |
列加工 |
---|---|---|---|---|
入云 |
MySQL->MySQL |
支持 |
支持 |
支持 |
入云 |
MySQL->GaussDB分布式版 |
支持 |
支持 |
支持 |
入云 |
MySQL->GaussDB主备版 |
支持 |
支持 |
支持 |
入云 |
MySQL->GaussDB(DWS) |
支持 |
支持 |
暂不支持 |
入云 |
MySQL->GaussDB(for MySQL) |
支持 |
支持 |
支持 |
入云 |
MySQL->MariaDB |
支持 |
支持 |
支持 |
入云 |
DDM->MySQL |
暂不支持 |
暂不支持 |
支持 |
入云 |
DDM->GaussDB(DWS) |
暂不支持 |
支持 |
暂不支持 |
入云 |
Oracle->GaussDB(DWS) |
支持 |
支持 |
暂不支持 |
入云 |
Oracle->MySQL |
支持 |
暂不支持 |
暂不支持 |
入云 |
Oracle->GaussDB(for MySQL) |
支持 |
暂不支持 |
暂不支持 |
入云 |
Oracle->GaussDB主备版 |
支持 |
暂不支持 |
支持 |
入云 |
Oracle->GaussDB分布式版 |
支持 |
暂不支持 |
支持 |
入云 |
DB2 for LUW->GaussDB主备版 |
支持 |
暂不支持 |
暂不支持 |
入云 |
DB2 for LUW->GaussDB分布式版 |
支持 |
暂不支持 |
暂不支持 |
入云 |
MariaDB->MariaDB |
支持 |
暂不支持 |
暂不支持 |
入云 |
MariaDB->MySQL |
支持 |
支持 |
支持 |
入云 |
MariaDB->GaussDB(for MySQL) |
支持 |
支持 |
支持 |
出云 |
MySQL->MySQL |
支持 |
支持 |
支持 |
出云 |
MySQL->kafka |
暂不支持 |
暂不支持 |
支持 |
出云 |
MySQL->CSS/ES |
支持 |
暂不支持 |
支持 |
出云 |
MySQL->MariaDB |
支持 |
支持 |
支持 |
出云 |
DDM->MySQL |
暂不支持 |
暂不支持 |
支持 |
出云 |
GaussDB主备版->MySQL |
支持 |
暂不支持 |
暂不支持 |
出云 |
GaussDB主备版->Oracle |
支持 |
暂不支持 |
支持 |
出云 |
GaussDB主备版->Kafka |
暂不支持 |
暂不支持 |
支持 |
出云 |
GaussDB主备版->GaussDB(DWS) |
支持 |
暂不支持 |
暂不支持 |
出云 |
GaussDB主备版->GaussDB分布式版 |
支持 |
暂不支持 |
支持 |
出云 |
GaussDB主备版->GaussDB主备版 |
支持 |
暂不支持 |
支持 |
出云 |
GaussDB分布式版->MySQL |
支持 |
暂不支持 |
暂不支持 |
出云 |
GaussDB分布式版->Oracle |
支持 |
暂不支持 |
支持 |
出云 |
GaussDB分布式版->GaussDB(DWS) |
支持 |
暂不支持 |
暂不支持 |
出云 |
GaussDB分布式版->Kafka |
暂不支持 |
暂不支持 |
支持 |
出云 |
GaussDB分布式版->GaussDB分布式版 |
支持 |
暂不支持 |
支持 |
出云 |
GaussDB分布式版->GaussDB主备版 |
支持 |
暂不支持 |
支持 |
出云 |
GaussDB(for MySQL)->MySQL |
支持 |
支持 |
暂不支持 |
出云 |
GaussDB(for MySQL)->GaussDB(DWS) |
暂不支持 |
支持 |
暂不支持 |
出云 |
GaussDB(for MySQL)->CSS/ES |
支持 |
暂不支持 |
支持 |
出云 |
MariaDB->MariaDB |
支持 |
暂不支持 |
暂不支持 |
自建-自建 |
MySQL->Kafka |
暂不支持 |
暂不支持 |
支持 |
自建-自建 |
MySQL->CSS/ES |
支持 |
暂不支持 |
支持 |
自建-自建 |
MySQL->GaussDB分布式版 |
支持 |
支持 |
支持 |
自建-自建 |
MySQL->GaussDB主备版 |
支持 |
支持 |
支持 |
自建-自建 |
Oracle->GaussDB主备版 |
支持 |
暂不支持 |
支持 |
自建-自建 |
Oracle->GaussDB分布式版 |
支持 |
暂不支持 |
支持 |
自建-自建 |
GaussDB主备版->Kafka |
暂不支持 |
暂不支持 |
支持 |
自建-自建 |
GaussDB分布式版->Kafka |
暂不支持 |
暂不支持 |
支持 |
自建-自建 |
DB2 for LUW->GaussDB主备版 |
支持 |
暂不支持 |
暂不支持 |
自建-自建 |
DB2 for LUW->GaussDB分布式版 |
支持 |
暂不支持 |
暂不支持 |
添加附加列
- 在实时同步任务的“数据加工”页面选择“附加列”,对于需要加工的表对象,单击“操作”列的添加。
图1 附加列
- 在弹出的“添加”对话框中,填选列名、操作类型、字段类型等信息,选择的操作类型不同,需要填写的信息也不同。完成后单击“确定”。
图2 操作类型
- 多对一映射场景下,需要使用数据加工的附加列操作来避免数据冲突。
- 支持的操作类型有以下几种
- “默认值”:使用输入的默认值填充新加的列。
- “以create_time为列”和“以update_time为列”操作会分别使用数据产生时间和修改时间填充新加的列。
- “表达式”:选择使用concat(_current_database, '@',_current_table) 表达式填充新加的列,暂不支持手动输入表达式。
- “以serverName@database@table为列”:使用@符号分别拼接serverName、源库的库名、表名填充新加的列,其中serverName为手动输入。
- “填充值”:选择填充值为新加的列,比如同步时间戳。
- 支持“批量设置”,将第一个可编辑表的附加列信息应用到此任务中所有可编辑的表。
- MySQL->GaussDB(for MySQL)同步,单表的列数超过500时, 对该表添加附加列可能会超过列数上限,会导致任务失败。
- 如果使用serverName@database@table作为附加列,后续在进行数据对比时,目标端将默认使用该附加列作为行比对、内容比对的隐含过滤条件。
- 有附加列的表,增量阶段不支持对表做drop table然后create table的DDL操作。
- 多对一映射场景,再编辑时,若新增的表之前已同步过、做过多对一映射并且设置过附加列,需要对该表重新设置附加列,否则默认保持上一次同步时的附加列设置。
- 检查无误后,单击“下一步”,进入下一步操作。
数据过滤
- 更新前不符合过滤条件,更新后符合。继续同步,在目标库执行相同的更新操作,如果匹配不到数据,则会忽略,会导致数据不一致。
- 更新前符合过滤条件,更新后不符合。继续同步,在目标库执行相同的更新操作。
- 在“数据加工”页面选择“数据过滤”。
图3 数据过滤
- 在“对象选择”区域选择需要加工的表对象。
- 在过滤条件区域,填写过滤条件(只需填写SQL语句的WHERE之后部分,例如id=1)后,单击“校验规则”。
- 每张表仅支持添加一个校验规则。
- 数据过滤每次最多支持512张表。
- 过滤表达式不支持使用某种数据库引擎特有的package、函数、变量、常量等写法,须使用通用SQL标准。请直接输入SQL语句中WHERE之后的部分(不包含WHERE和分号,例如:sid > 3 and sname like "G %"),最多支持输入512个字符。
- 过滤条件填写的SQL语句中,关键字需要用反引号,datatime类型(包含日期和时间)和字符串类型需要用单引号,例如:`update` > '2022-07-13 00:00:00' and age >10、`update` ='abc' 。
- 使用timestamp类型做过滤条件时,字符类型的时间应填写为UTC时区的时间值,例如MySQL中对timestamp类型固定按UTC时区存储,需要使用UTC时区的时间值进行比较才能达到预期效果。
- 过滤条件不支持使用隐式转换规则,请填写正确的数据类型条件。例如Oracle的c列是字符类型varchar2,过滤条件应该设置为 c > '10',而不是c > 10。
- 不支持对LOB字段设置过滤条件,如CLOB、BLOB、BYTEA等大字段类型。
- 不支持库名、表名带有换行符的对象设置过滤规则。
- 不支持for update等行级锁的语法做过滤条件。
- 不支持对列名做函数操作,如果使用函数操作可能导致数据不一致。
- 建议不要对非精确类型字段设置过滤条件,如FLOAT、DECIMAL、DOUBLE等。
- 建议不要对带有特殊字符的字段设置过滤条件。
- 建议不要对过滤条件涉及的列做DDL操作,可能导致任务异常。
- 不建议使用非幂等表达式或函数作为数据加工条件,如SYSTIMESTAMP,SYSDATE等,因其每次调用返回的结果可能会有差异,导致达不到预期。
- 任务再编辑时,已经同步的表不支持修改过滤规则。
- Oracle为源同步链路进行数据过滤时,定长字符类型NCHAR、CHAR需要使用完整固定长度字符进行匹配。
- 校验通过后,单击“生成过滤规则”,即可在过滤规则表格中看到该规则。
- 检查无误后,单击“下一步”,进入下一步操作。
数据过滤高级设置
如果需要使用关联表查询,可以使用数据加工的高级设置功能。
- 在实时同步任务的“数据加工”页面选择“数据过滤”。
- 在“对象选择”区域选择需要加工的表对象。
- 在过滤条件区域,填写联表查询过滤条件,例如:id1 in (select id from db1.tab1 where id >=3 and id <10),单击“校验规则”。
- 每张表仅支持添加一个校验规则。
- 数据过滤每次最多支持512张表。
- 过滤表达式不支持使用某种数据库引擎特有的package、函数、变量、常量等写法,须使用通用SQL标准。请直接输入SQL语句中WHERE之后的部分(不包含WHERE和分号,例如:sid > 3 and sname like "G %"),最多支持输入512个字符。
- 过滤条件不支持使用隐式转换规则,请填写正确的数据类型条件。例如Oracle的c列是字符类型varchar2,过滤条件应该设置为 c > '10',而不是c > 10。
- 不支持对LOB字段设置过滤条件,如CLOB、BLOB、BYTEA等大字段类型。
- 不支持库名、表名带有换行符的对象设置过滤规则。
- 不支持for update等行级锁的语法做过滤条件。
- 建议不要对非精确类型字段设置过滤条件,如FLOAT、DECIMAL、DOUBLE等。
- 建议不要对带有特殊字符的字段设置过滤条件。
- 不建议使用非幂等表达式或函数作为数据加工条件,如SYSTIMESTAMP,SYSDATE等,因其每次调用返回的结果可能会有差异,导致达不到预期。
- Oracle为源同步链路进行数据过滤时,定长字符类型NCHAR、CHAR需要使用完整固定长度字符进行匹配。
- 校验通过后,单击“生成加工规则”,即可在加工规则表格中看到该规则。
- 在“高级设置”中设置关联表的“配置条件”和“配置规则”,辅助您进行数据过滤。
图4 高级设置
- 检查无误后,单击“下一步”,进入下一步操作。
列加工
- 在实时同步任务的“数据加工”页面选择 。
- 选择列加工方式。
目前仅MySQL->GaussDB、Oralce->GaussDB支持选择导入文件方式进行列加工,其他链路默认通过对象选择方式进行列加工。
- 对象选择方式:
- 在“对象选择”区域选择需要加工的对象。
图5 列加工
- 单击右侧已选对象的“编辑”。
- 在“编辑列”中,勾选需要映射的列,填写映射后的“新列名”。
图6 编辑列
- 列加工提供列级的查询、映射和过滤能力。
- 编辑列名后,目标数据库的列名为修改后的名称。
- 列映射名不能和原列名或已存在的映射名相同。
- 不支持库名、表名带有换行符的列进行映射。
- 任务再编辑时,已经同步的表不支持修改列信息。
- 只有勾选的列才会被同步,后续新增的列不在列加工范围内。
- 不支持对分区表的分区字段进行列映射和列过滤。
- 进行列过滤、列映射、附加列的表,增量阶段不支持对表中已过滤或映射的列进行DDL操作。
- 进行列过滤、列映射、附加列的表,增量阶段不支持对表做drop table然后create table的DDL操作。
- 当源数据库是MySQL或者GaussDB(for MySQL)时,不支持对存在函数索引的列进行列过滤、列映射。
- 填写完成后单击“确定”。
- 在“对象选择”区域选择需要加工的对象。
- 文件导入方式:
- 在实时同步任务的“数据加工”页面选择 。
- 单击“下载模板”。
图7 列加工
- 在下载的Excel模板中,按照模板要求,填写需要导入的对象信息。
- 单击“添加文件”,在对话框中选择编辑完成的模板。
- 单击“上传文件”。
- 对象选择方式:
- 检查无误后,单击“下一步”,进入下一步操作。
查看数据过滤
- 在“实时同步管理”页面任务列表中,选择需要查看数据加工的任务,单击任务名称。
- 选择“数据加工”页签,查看数据过滤记录。单击右上角的,可刷新数据。
查看列加工
- 在“实时同步管理”页面任务列表中,选择需要查看的任务,单击任务名称。
- 选择“同步映射”页签,单击右上角选择列映射,查看列映射记录。单击右上角的,可刷新数据。
图8 查看列映射