将源中的两个 table 同步到目标节点中的一个 table 时出现问题
Problems synchronizing two tables in the source to one table in target node
我有这种情况:
源节点:
架构 1:
- Table1: id, field1, field2
- Table2:id,table1_id,table3_id
- Table3: id
- Table4:id,table1_id
架构 2:
- Table5:id,table3_id,table6_id,field3,field4
- Table6: id
目标节点:
架构 1:
- Table7: id, field1, field2, field3, field4.
为了解决这个问题,我创建了一个 "default" 类型的路由器,每个 table 触发器和 trigger_router table 中的相应行。之后,我在 transform_table 中创建了一行来管理从源节点中的 Table1 到目标节点中的 Table 7 的转换。这是我的问题:起初,我试图在 transform_table 中创建一行以获取从 Table6 到 Table7 的数据,但我不能使用任何主键来 link Table1 和 Table6 直接在源代码中。现在我正在尝试使用查找转换来获取 field3 和 field4.In 为了实现这一点,我在 transform_column table 中创建了一行,如下所示:
TARGET_COLUMN_NAME: field3
SOURCE_COLUMN_NAME: null
PK: 0
TRANSFORM_TYPE:lookup
TRANSFORM_EXPRESSION:
SELECT field3
FROM schema1.table1 s1t1
INNER JOIN schema1.table2 s1t2 ON s1t2.table1_id = s1t1.id
LEFT JOIN schema1.table3 s1t3 ON s1t3.id = s1t2.table3_id
LEFT JOIN schema2.table5 s2t5 ON s2t5.table3_id = s1t3.id
LEFT JOIN schema2.table6 s2t6 ON s2t6.id = s2t5.table6_id
WHERE s1t1.id = :ID
我知道,当转换发生时,:ID 变量将替换为我得到的 table1 行的 ID。我遇到的问题是 field3 和 field4 在某些 table7 行中可能为 NULL(正如您可以从查询中的 LEFT JOINS 想象的那样)。所以我得到了错误
Expected a single row, but returned no rows from lookup for target
column field3 on transform source_2_target_table7_table1_schema1
当查找表达式 returns 没有行时,是否有任何方法可以强制 SymmetricDS 在此列中复制 NULL 值?或者有没有其他方法可以实现这种同步?
提前致谢
通过使用 BSH 转换和 sqlTemplate 解决。当 sqlTemplate 查询 return 没有行时,只是 return null。
我有这种情况:
源节点:
架构 1:
- Table1: id, field1, field2
- Table2:id,table1_id,table3_id
- Table3: id
- Table4:id,table1_id
架构 2:
- Table5:id,table3_id,table6_id,field3,field4
- Table6: id
目标节点:
架构 1:
- Table7: id, field1, field2, field3, field4.
为了解决这个问题,我创建了一个 "default" 类型的路由器,每个 table 触发器和 trigger_router table 中的相应行。之后,我在 transform_table 中创建了一行来管理从源节点中的 Table1 到目标节点中的 Table 7 的转换。这是我的问题:起初,我试图在 transform_table 中创建一行以获取从 Table6 到 Table7 的数据,但我不能使用任何主键来 link Table1 和 Table6 直接在源代码中。现在我正在尝试使用查找转换来获取 field3 和 field4.In 为了实现这一点,我在 transform_column table 中创建了一行,如下所示:
TARGET_COLUMN_NAME: field3
SOURCE_COLUMN_NAME: null
PK: 0
TRANSFORM_TYPE:lookup
TRANSFORM_EXPRESSION:
SELECT field3
FROM schema1.table1 s1t1
INNER JOIN schema1.table2 s1t2 ON s1t2.table1_id = s1t1.id
LEFT JOIN schema1.table3 s1t3 ON s1t3.id = s1t2.table3_id
LEFT JOIN schema2.table5 s2t5 ON s2t5.table3_id = s1t3.id
LEFT JOIN schema2.table6 s2t6 ON s2t6.id = s2t5.table6_id
WHERE s1t1.id = :ID
我知道,当转换发生时,:ID 变量将替换为我得到的 table1 行的 ID。我遇到的问题是 field3 和 field4 在某些 table7 行中可能为 NULL(正如您可以从查询中的 LEFT JOINS 想象的那样)。所以我得到了错误
Expected a single row, but returned no rows from lookup for target column field3 on transform source_2_target_table7_table1_schema1
当查找表达式 returns 没有行时,是否有任何方法可以强制 SymmetricDS 在此列中复制 NULL 值?或者有没有其他方法可以实现这种同步?
提前致谢
通过使用 BSH 转换和 sqlTemplate 解决。当 sqlTemplate 查询 return 没有行时,只是 return null。