我有这种情况:
为了解决这个问题,我创建了一个"默认"的路由器。每个表的类型,触发器以及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值?或者还有其他方法可以实现这种同步吗?
提前致谢
答案 0 :(得分:0)
使用BSH转换和sqlTemplate解决。当sqlTemplate查询没有返回任何行时,只返回null。