私はこのシナリオを持っています:
ソース ノード:
スキーマ 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 値をコピーするように強制する方法はありますか? または、この種の同期を実現する他の方法はありますか?
前もって感謝します