0

我有这种情况:

源节点:

架构1:

  • 表 1:id、field1、field2
  • 表2:id、table1_id、table3_id
  • 表 3:标识
  • 表4:id,table1_id

架构2:

  • 表 5:id、table3_id、table6_id、field3、field4
  • 表 6:标识

目标节点:

架构1:

  • 表 7:id、field1、field2、field3、field4。

为了解决这个问题,我创建了一个“默认”类型的路由器,每个表的触发器和 trigger_router 表中的相应行。之后,我在 transform_table 中创建了一行来管理从源节点中的表 1 到目标节点中的表 7 的转换。这是我的问题:起初,我试图在transform_table中创建一行,用于从Table6到Table7中获取数据,但是我不能使用任何主键在源中直接链接Table1和Table6。现在我正在尝试使用查找转换来获取 field3 和 field4。为了实现这一点,我在 transform_column 表中创建了一行,如下所示:

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 想象的那样)。所以我得到了错误

预期为单行,但在转换 source_2_target_table7_table1_schema1 上查找目标列 field3 时未返回任何行

当查找表达式不返回任何行时,有什么方法可以强制 SymmetricDS 在此列中复制 NULL 值?或者有没有其他方法可以实现这种同步?

提前致谢

4

1 回答 1

0

通过使用 BSH 转换和 sqlTemplate 解决。当 sqlTemplate 查询不返回任何行时,只返回 null。

于 2015-01-26T12:49:16.817 回答