DataSpiderではトリガー機能によって、トリガーを発火させてスクリプトを実行することが可能です。
今回はDBトリガーでDBの監視対象テーブルのステータスカラムに、特定の値が格納されていることをトリガーとして、対象のレコード情報をCSVファイルに出力する方法を説明します。
処理フローと処理内容は以下の通りです。
| トリガー発火 |
|
|---|---|
| 書き込み |
|
・データベースへの接続が済んでいること(今回はPostgreSQL14をデータベースとして使用)
・監視対象テーブルにDataSpiderから監視するステータスカラムがINTEGER型で用意されていること
・DataSpiderファイルシステム上に連携先のCSVファイル格納フォルダが作成されていること
今回使用する監視対象のテーブル構造は以下の通りです。

トリガー発火により実行するプロジェクト、スクリプトを新規に作成します。
[プロジェクト名]:DB-CSV連携(任意)
[スクリプト名]:DBトリガー起動(任意)

DBトリガーはXML型のスクリプト入力変数にレコード情報を代入します。
※実行スクリプトの最上位のスクリプト変数に代入されるため、最上位にXML型のスクリプト入力変数の設定が必要です。
また、Mapper内で扱う場合にはスキーマの読み込みが必要となります。
【4-1】
プロジェクトエクスプローラから対象スクリプトを右クリックし、「新規作成」-「スクリプト変数」を選択します。

「新規スクリプト変数」プロパティ設定ダイアログで、以下の通り設定を行います。
[変数名] : record_info(任意)
[変数型] : XML型
[スクリプトを入力変数として使用する]にチェックを入れます。

[完了]を押下するとプロパティ設定ダイアログが閉じ、「record_info」スクリプト変数が作成されます。

【4-2】
ツールパレットから「データベース」-「PostgreSQL」-「テーブル読み取り」をスクリプトキャンバスにドラッグ&ドロップします。

「新規テーブル読み取り処理」プロパティ設定ダイアログで、以下の通り設定を行います。
[名前] : get_table_data(任意)
[接続先] : PostgreSQL 14接続設定
[テーブル名] : dataspider.products

[完了]を押下すると、プロパティ設定ダイアログが閉じ、「get_table_data」アイコンがキャンバスに配置されます。

【4-3】
ツールパレットから「変換」-「基本」-「マッピング」をスクリプトキャンバスにドラッグ&ドロップします。

配置された「mapping」アイコンと「Start」アイコンの間に、プロセスフローとデータフローを引きます。

「mapping」アイコンをダブルクリックし、Mapperエディタを開きます。
入力データにスクリプト変数の「record_info」があることを確認します。

「record_info」を右クリックし、「スキーマの読み込み」を選択します。

「スキーマの読み込み」プロパティ設定ダイアログが表示されるので、[コンポーネントから選択]から「get_table_data」を選択します。
![[コンポーネントから選択]から「get_table_data」を選択](./images/db_trigger/db_trigger_04_11.png)
[完了]を押下するとプロパティ設定ダイアログが閉じ、「record_info」配下にテーブルのカラム名がスキーマとして設定されます。

「get_table_data」を削除します。

以上でDBトリガー発火時のレコード情報取得設定の完成です。
【5-1】
ツールパレットから「ファイル」-「CSV」-「CSVファイル書き込み」をスクリプトキャンバスにドラッグ&ドロップします。

「新規CSVファイル書き込み処理」プロパティ設定ダイアログで、以下の通り設定を行います。
[名前] : csv_write(任意)
[入力データ] : mapping
[ファイル] : /data/work/test/製品申込情報.csv
[デリミタモード] : 一覧から選択
[デリミタ文字] : 半角カンマ
[列一覧] : 「追加」から列名を追加
[クォーテーション]にチェック

次に、「書き込み設定」タブを選択し、以下の通り設定を行います。
[エンコード] : Windows-31J
[改行コード] : CR+LF
[上書き]、[追加書き込み]、[1行目に列名を挿入]、[ファイルが存在する場合は列名を挿入しない]にチェックを入れます。

[完了]を押下すると、プロパティ設定ダイアログが閉じ、「csv_write」アイコンがキャンバスに配置されます。

【5-2】
「mapping」アイコンをダブルクリックし、Mapperエディタを開きます。
必要なマッピングがされていることを確認します。

以上でCSVファイルのデータ書き込み設定の完了です。
【6-1】
処理の順番にプロセスフローを引きます。
(「Start」→「mapping」→「csv_write」→「End」の順)

【6-2】
[プロジェクトの保存]を押下してプロジェクトを保存します。
![[プロジェクトの保存]を押下してプロジェクトを保存](./images/db_trigger/db_trigger_06_2.png)
【6-3】
[ファイル]メニューの[プロジェクトをサービスとして登録]を選択します。

[サービス名]の値を指定して [完了]を押下します。

「サービスの登録」ダイアログが表示されるので、[OK]を押下します。

以上でスクリプトの完成とサーバーへの登録が完了です。
「マイ トリガー」の「マイ トリガーのタスク」で[新しいDBトリガーを作成する]を押下します。

「DBトリガー」プロパティ設定ダイアログが表示されるので、以下の通り設定を行い[次へ]を押下します。
[トリガー名] : DBトリガー(DB-CSV連携)(任意)
[接続] : PostgreSQL 14接続設定
[監視テーブル] : "dataSpider"."products"
[ステータスカラム] : "dataSpider_status"
[監視イベント] : 「挿入時」「更新時」「削除時」にチェック
[ステータス値] :
0 : [未変更状態]
1 : [挿入時トリガー待ち状態]
2 : [更新時トリガー待ち状態]
3 : [削除時トリガー待ち状態]
4 : [削除状態]

トリガー発火時に実行されるスクリプトを設定します。
[サービス] : DB-CSV連携
[スクリプト] : DBトリガー起動

[完了]を押下すると、「トリガー有効の確認」ダイアログが表示されるので、[はい]を押下します。
※[いいえ]を押下するとトリガーが無効状態で登録されます。

「マイ トリガー」から設定したDBトリガーが表示されていることを確認します。

以上でDBトリガーの作成は完了です。
【挿入時トリガー待ち状態のステータス】
エクスプローラで、出力先の「/data/work/test/製品申込情報.csv」を確認します。

監視対象のテーブルに、ステータスカラムが「1」となるようにレコードをINSERTします。



すると、DBトリガーの発生条件を満たしたため、DBトリガーが発火し、
サービス「DB-CSV連携」のスクリプト「DBトリガー起動」が実行されます。
実行結果が正常終了していることや「/data/work/test/製品申込情報.csv」が出力されていることを確認します。


また、DBトリガーでの発火のため、監視対象テーブルのステータスカラムが「0」に更新されていることを確認します。

【更新時トリガー待ち状態のステータス】
エクスプローラで、出力先の「/data/work/test/製品申込情報.csv」を確認します。

監視対象のテーブルに、ステータスカラムが「2」となるようにレコードをUPDATEします。



すると、DBトリガーの発生条件を満たしたため、DBトリガーが発火し、
サービス「DB-CSV連携」のスクリプト「DBトリガー起動」が実行されます。
実行結果が正常終了していることや「/data/work/test/製品申込情報.csv」に追記されていることを確認します。


また、DBトリガーでの発火のため、監視対象テーブルのステータスカラムが「0」に更新されていることを確認します。

【削除時トリガー待ち状態のステータス】
エクスプローラで、出力先の「/data/work/test/製品申込情報.csv」を確認します。

監視対象のテーブルにステータスカラムが「3」となるようにレコードをUPDATEします。



すると、DBトリガーの発生条件を満たしたため、DBトリガーが発火し、
サービス「DB-CSV連携」のスクリプト「DBトリガー起動」が実行されます。
実行結果が正常終了していることや「/data/work/test/製品申込情報.csv」に追記されていることを確認します。


また、DBトリガーでの発火のため、監視対象テーブルのステータスカラムが「4」に更新されていることを確認します。

以上が、DBトリガーによるDBの監視対象テーブルのステータスカラムに、特定の値が格納されていることをトリガーとして、対象のレコード情報をCSVファイルに出力する方法の説明になります。
何でもお気軽にご質問ください