SymmetricDS Transform
字段映射部分及自定义规则部分:
transform_table:
-
transform_id、source_table_name、source_node_group_id、target_node_group_id、
-
transform_point(EXTRACT、LOAD)、
-
column_policy
(SPECIFIED只有被定义的参与变更的列才会作为变更的一部分、
IMPLIED如果没有明确指定,则会源端列会被同步到目标端
NONE删除操作不会对目标端有影响) -
update_first
这个选项会覆盖插入操作的默认行为,symDS会先执行更新操作,如若更新失败,会执行插入操作 -
delete_action
(DEL_ROW 删除操作、UPDATE_COL、删除操作会使目标端更新操作、NONE 目标端不会变化)
-
update_action
(UPD_ROW 正常的更新操作、INS_ROW更新操作->插入操作、DEL_ROW 更新操作->删除操作、NONE nothing done)
-
一些transfrom 使用样例
1.从一张源表复制一列同步到多表的列上 2.合并多个源表的列成为目标表的一行 3.依靠源数据同步,在目标表里插入列的约束 4.依据源表的变动情况,将多行数据插入到一张目标表中。 5.当加载到目标库时可应用bean shell脚本来实现自定义转变
transform_column
-
pk
无所谓是不是目标表的主键,是用来辨识目标行的。
被用来定义where从句当更新还有删除操作发生在目标的时候。
Unless the column policy is “IMPLIED” at least one row marked as a pk
should be present for each transform_id.
source_column_name、target_column_name、 -
include_on
(I、U、D、*)应用于哪种操作,插入、更新、删除、所有 -
transform_type
实现IColumnTransform接口可以自行定义变更类型
-
现有类型如下:
-
copy default: 将源列值复制到目标列
-
remove :exclude the source column,仅限用于column_policy为IMPLIED
-
const:将常量给目标列赋值
-
variable:将动态变量给目标列赋值
-
additive:数值的计算
-
substring:源数据的substring给目标列赋值
-
Left 、BLeft 、Multiply
-
lookup:可使用查询语句(可查其他表),不过查询必须仅返回一行、并且首列作为同步值
-
bsh: BeanShell Script,在转变表达式中支持bsh脚本。它可以返回String or an instance of
NewAndOldValue 有很多变量以及函数可以使用。 -
identity、
-
math:简单科学计算可以使用(源列数据,更新前数据、现数据)
-
copyIfChanged:这个外部配置就行了吧
trigger.update.capture.changed.data.only.enabled 默认是false
可以设置为true;多了个配置就是列的值一致,忽略该列还可以忽略该行。 -
valueMap: 映射值
Clarion Date Time、Columns To Rows、isEmpty、isBlank、Null Value、Deleted Columns
DEMO:
insert into sym_transform_table values ('tftype', 'corp', 'store', 'LOAD', null, null, 'jsy', null, null, 'jsytemp',
0, 'UPD_ROW', 'DEL_ROW', 1, 'IMPLIED', current_timestamp, 'yuye', current_timestamp, 'type map');
insert into sym_transform_column values ('tftype', '*', 'nian', 'age', 0, 'copy', '', 1, CURRENT_TIMESTAMP, 'dota', CURRENT_TIMESTAMP, 'type map');
insert into sym_transform_column values ('tftype', '*', 'mingzi', 'name', 0, 'copy', '', 1, CURRENT_TIMESTAMP, 'dota', CURRENT_TIMESTAMP, 'type map');
上一篇: 如何理解“命名空间”?