• No : 35912
  • 公開日時 : 2024/05/29 06:56
  • 印刷
DSCloudDSServista

DataSpider活用事例 ~【DataSpider】異なるDBテーブル間のデータを同期する方法~

異なるDBテーブル間でデータ同期を行いたいです。 

メインテーブルから削除されたデータをサブテーブルからも削除する方法を教えてください。 

カテゴリー : 

回答

[DBテーブルによる置換] ロジックと [更新系SQL実行] のSQLパラメータを使用することで対応可能です。 

 

以下にスクリプトの作成例を記載します。 

 

■スクリプト例 

 

■PostgreSQL(メインテーブル) 

 

■SQL Server(サブテーブル) 

 

■前提 

 メインテーブルに存在しないデータをサブテーブルからも削除します。 

 今回は ID が「002」と「004」のデータが該当します。 

 

■作成手順 

1.ツールパレットの [データベース] - [SQL Server] より、[テーブル読み取り] アイコンをスクリプトキャンパスに配置します。 

 

2.プロパティにて、以下のようにサブテーブルのデータを読み取るよう設定します。 

 

3.ツールパレットの [データベース] - [SQL Server] より、[更新系SQL実行] アイコンをスクリプトキャンパスに配置します。 

 

4.プロパティにて以下のように設定します。 

 今回は、削除対象データ ID が動的となるため、SQL文の WHERE句の条件に SQLパラメータを使用します。 

 SQLパラメータは「?{ID}」と記述しています。 

 

5.ツールパレットの [変換] - [基本] より、マッピングをスクリプトキャンパスに配置し、[テーブル読み取り]、[更新系SQL実行] とフローを繋ぎます。 

 

6.マッピングをダブルクリックし、Mapperエディタを開きます。 

 

7.ツールパレットの [文字列] - [変換] より、[DBテーブルによる置換] ロジックをレイヤ上に配置し、column[1](=ID) からマッピングリンクを引きます。 

 

8.プロパティにて以下のように設定を行い、サブテーブルの ID がメインテーブルにも存在する場合は、name の値を出力し、存在しない場合は、サブテーブルの ID をそのまま返すようにします。 

 

9.ツールパレットの [条件] - [文字列] より、[同じ] ロジックをレイヤ上に配置し、column[1](=ID) と [DBテーブルによる置換] ロジックからそれぞれマッピングリンクを引き、サブテーブル の ID と [DBテーブルによる置換] ロジックを通過後の値を比較します。 

  

 なお、比較結果は以下のようになります。 

  ・サブテーブルの ID がメインテーブルにも存在する場合 

    ⇒ID と 置換後のname を比較するため結果は「false」 

  ・サブテーブルの ID がメインテーブルに存在しない場合 

    ⇒ID と ID を比較するため結果は「true」 

 

10.ツールパレットの [繰り返し] - [条件指定] より、[条件による抽出] ロジックをレイヤ上に配置し、 

 以下のようにマッピングリンクを繋いで、[同じ] ロジックの結果が「true」の場合の ID のみを抽出し、 

 [更新系SQL実行] の SQLパラメータに渡します。 

 

11.スクリプトを実行し、サブテーブルからID が「002」と「004」のデータが削除されていることを確認します。 

 

■参考情報 

 ▼DataSpider Servista ヘルプ 

  ・[更新系SQL実行] 

   

  ・[DBテーブルによる置換] 

 

 ▼DataSpider Cloud ヘルプ 

  ・[更新系SQL実行] 

   

  ・[DBテーブルによる置換] 

目的別で検索
設定