使用转换列和转换 table、SymmetricDS 的意外行为
Unexpected behavior using transform column and transform table, SymmetricDS
我有以下转换列
insert into SYM_TRANSFORM_COLUMN (
transform_id, include_on, target_column_name, source_column_name, pk,
transform_type, transform_expression, transform_order, last_update_time,
create_time
) values (
'send_source_node_id', '*', 'node_id', 'employee_id', 1,
'bsh', 'String node = targetNode.getNodeId(); String value = currentValue; return value + "-" + sourceNodeId;', 1, current_timestamp, current_timestamp
);
insert into SYM_TRANSFORM_COLUMN (
transform_id, include_on, target_column_name, source_column_name, pk,
transform_type, transform_expression, transform_order, last_update_time,
create_time
) values (
'copy_employee_id', '*', 'employee_id', 'employee_id', 0,
'copy', '', 10, current_timestamp, current_timestamp
);
insert into SYM_TRANSFORM_COLUMN (
transform_id, include_on, target_column_name, source_column_name, pk,
transform_type, transform_expression, transform_order, last_update_time,
create_time
) values (
'copy_employee_name', '*', 'name', 'name', 0,
'copy', '', 10, current_timestamp, current_timestamp
);
与其变换tables
insert into SYM_TRANSFORM_TABLE (
transform_id, source_node_group_id, target_node_group_id, transform_point, source_table_name,
target_table_name, update_action, delete_action, transform_order, column_policy, update_first,
last_update_time, create_time
) values (
'copy_employee_id', 'school', 'main-school', 'EXTRACT', 'employees',
'employees', 'UPDATE_COL', 'DEL_ROW', 1, 'IMPLIED', 0,
current_timestamp, current_timestamp
);
insert into SYM_TRANSFORM_TABLE (
transform_id, source_node_group_id, target_node_group_id, transform_point, source_table_name,
target_table_name, update_action, delete_action, transform_order, column_policy, update_first,
last_update_time, create_time
) values (
'copy_employee_name', 'school', 'main-school', 'EXTRACT', 'employees',
'employees', 'UPDATE_COL', 'DEL_ROW', 1, 'IMPLIED', 0,
current_timestamp, current_timestamp
);
insert into SYM_TRANSFORM_TABLE (
transform_id, source_node_group_id, target_node_group_id, transform_point, source_table_name,
target_table_name, update_action, delete_action, transform_order, column_policy, update_first,
last_update_time, create_time
) values (
'send_source_node_id', 'school', 'main-school', 'EXTRACT', 'employees',
'employees', 'UPDATE_COL', 'DEL_ROW', 1, 'IMPLIED', 0,
current_timestamp, current_timestamp
);
我的来源结构 table
create table employees (
employee_id serial,
name varchar(50),
CONSTRAINT departments_pk PRIMARY KEY (employee_id)
);
我的目标结构table
create table employees (
master_employee_id uuid default uuid_generate_v1(),
employee_id integer,
name varchar(50),
node_id varchar(50),
CONSTRAINT employees_pk PRIMARY KEY (master_employee_id)
);
同步与其他相同的 tables 工作正常,但这些 tables 不能正常工作,因为当在源中添加新员工时 table 两个记录将添加到目标 table。
我不知道这种行为,有人可以向我解释一下吗?
Example of the result in the target table
sym_transform_table 中的每个条目代表一个 table 映射,它将处理源 table 的行更改。由于同一源 table 有 3 个 table 映射,因此 table 上的每个行更改都会导致 3 个转换行。
我想你想在 sym_transform_table 中使用 1 table 映射,像这样:
insert into SYM_TRANSFORM_TABLE (
transform_id, source_node_group_id, target_node_group_id, transform_point, source_table_name,
target_table_name, update_action, delete_action, transform_order, column_policy, update_first,
last_update_time, create_time
) values (
'employees_to_employees', 'school', 'main-school', 'EXTRACT', 'employees',
'employees', 'UPDATE_COL', 'DEL_ROW', 1, 'IMPLIED', 0,
current_timestamp, current_timestamp
);
然后更改 sym_transform_column 中的条目以使用相同的 "employees_to_employees" 转换 ID 引用它。
我有以下转换列
insert into SYM_TRANSFORM_COLUMN (
transform_id, include_on, target_column_name, source_column_name, pk,
transform_type, transform_expression, transform_order, last_update_time,
create_time
) values (
'send_source_node_id', '*', 'node_id', 'employee_id', 1,
'bsh', 'String node = targetNode.getNodeId(); String value = currentValue; return value + "-" + sourceNodeId;', 1, current_timestamp, current_timestamp
);
insert into SYM_TRANSFORM_COLUMN (
transform_id, include_on, target_column_name, source_column_name, pk,
transform_type, transform_expression, transform_order, last_update_time,
create_time
) values (
'copy_employee_id', '*', 'employee_id', 'employee_id', 0,
'copy', '', 10, current_timestamp, current_timestamp
);
insert into SYM_TRANSFORM_COLUMN (
transform_id, include_on, target_column_name, source_column_name, pk,
transform_type, transform_expression, transform_order, last_update_time,
create_time
) values (
'copy_employee_name', '*', 'name', 'name', 0,
'copy', '', 10, current_timestamp, current_timestamp
);
与其变换tables
insert into SYM_TRANSFORM_TABLE (
transform_id, source_node_group_id, target_node_group_id, transform_point, source_table_name,
target_table_name, update_action, delete_action, transform_order, column_policy, update_first,
last_update_time, create_time
) values (
'copy_employee_id', 'school', 'main-school', 'EXTRACT', 'employees',
'employees', 'UPDATE_COL', 'DEL_ROW', 1, 'IMPLIED', 0,
current_timestamp, current_timestamp
);
insert into SYM_TRANSFORM_TABLE (
transform_id, source_node_group_id, target_node_group_id, transform_point, source_table_name,
target_table_name, update_action, delete_action, transform_order, column_policy, update_first,
last_update_time, create_time
) values (
'copy_employee_name', 'school', 'main-school', 'EXTRACT', 'employees',
'employees', 'UPDATE_COL', 'DEL_ROW', 1, 'IMPLIED', 0,
current_timestamp, current_timestamp
);
insert into SYM_TRANSFORM_TABLE (
transform_id, source_node_group_id, target_node_group_id, transform_point, source_table_name,
target_table_name, update_action, delete_action, transform_order, column_policy, update_first,
last_update_time, create_time
) values (
'send_source_node_id', 'school', 'main-school', 'EXTRACT', 'employees',
'employees', 'UPDATE_COL', 'DEL_ROW', 1, 'IMPLIED', 0,
current_timestamp, current_timestamp
);
我的来源结构 table
create table employees (
employee_id serial,
name varchar(50),
CONSTRAINT departments_pk PRIMARY KEY (employee_id)
);
我的目标结构table
create table employees (
master_employee_id uuid default uuid_generate_v1(),
employee_id integer,
name varchar(50),
node_id varchar(50),
CONSTRAINT employees_pk PRIMARY KEY (master_employee_id)
);
同步与其他相同的 tables 工作正常,但这些 tables 不能正常工作,因为当在源中添加新员工时 table 两个记录将添加到目标 table。 我不知道这种行为,有人可以向我解释一下吗?
Example of the result in the target table
sym_transform_table 中的每个条目代表一个 table 映射,它将处理源 table 的行更改。由于同一源 table 有 3 个 table 映射,因此 table 上的每个行更改都会导致 3 个转换行。
我想你想在 sym_transform_table 中使用 1 table 映射,像这样:
insert into SYM_TRANSFORM_TABLE (
transform_id, source_node_group_id, target_node_group_id, transform_point, source_table_name,
target_table_name, update_action, delete_action, transform_order, column_policy, update_first,
last_update_time, create_time
) values (
'employees_to_employees', 'school', 'main-school', 'EXTRACT', 'employees',
'employees', 'UPDATE_COL', 'DEL_ROW', 1, 'IMPLIED', 0,
current_timestamp, current_timestamp
);
然后更改 sym_transform_column 中的条目以使用相同的 "employees_to_employees" 转换 ID 引用它。