0

私はこのシナリオを持っています:

ソース ノード:

スキーマ 1:

  • テーブル 1: id、フィールド 1、フィールド 2
  • テーブル 2: id、table1_id、table3_id
  • 表3: ID
  • 表 4: id、table1_id

スキーマ 2:

  • 表 5: id、table3_id、table6_id、field3、field4
  • 表 6: ID

ターゲット ノード:

スキーマ 1:

  • 表 7: id、フィールド 1、フィールド 2、フィールド 3、フィールド 4。

これを解決するために、「デフォルト」タイプのルーターを 1 つ作成し、各テーブルのトリガーと、trigger_router テーブルの対応する行を作成しました。その後、ソース ノードの Table1 からターゲット ノードの Table 7 への変換を管理するために、transform_table に 1 つの行を作成しました。ここに私の問題があります: 最初に、Table6 から Table7 にデータを取得するために transform_table に 1 つの行を作成しようとしましたが、主キーを使用して 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 に置き換えられることを理解しています。私が抱えている問題は、いくつかの table7 行で field3 と field4 が NULL になる可能性があることです (クエリの LEFT JOINS から想像できるように)。だから私はエラーが発生しています

単一行が予期されていましたが、変換 source_2_target_table7_table1_schema1 のターゲット列 field3 のルックアップから行が返されませんでした

ルックアップ式が行を返さない場合に、SymmetricDS がこの列に NULL 値をコピーするように強制する方法はありますか? または、この種の同期を実現する他の方法はありますか?

前もって感謝します

4

1 に答える 1