将源中的两个表同步到目标节点中的一个表时出现问题

时间:2015-01-21 08:13:27

标签: symmetricds

我有这种情况:

源节点:

Schema1:

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

SCHEMA2:

  • 表5:id,table3_id,table6_id,field3,field4
  • 表6:id

目标节点:

Schema1:

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

为了解决这个问题,我创建了一个"默认"的路由器。每个表的类型,触发器以及trigger_router表中的相应行。之后,我在transform_table中创建了一行来管理从源节点中的Table1到目标节点中的表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

上的column field3

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

提前致谢

1 个答案:

答案 0 :(得分:0)

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