HOME技術コラムDB連携①スプリクト作成編
DataSpiderではトリガー機能によって、トリガーを発火させてスクリプトを実行することが可能です。
今回はファイルトリガーで監視対象となるExcelファイルが配置されたことをトリガーに、Excelのデータを読み取り、読み取ったデータを加工してPostgreSQLデータベースに書き込む方法を説明します。
処理フローと処理内容は以下の通りです。
トリガー発火 |
|
---|---|
読み取り |
|
変換 |
|
書き込み |
|
・データベースへの接続が済んでいること(今回はPostgresSQL13をデータベースとして使用)
・データ連携元のExcelファイルがDataSpiderファイルシステム上に配置されていること
今回連携したExcelブック「/data/work/売上データ.xlsx」のシート「売上データ」の内容は以下の通りです。
トリガー発火により実行するプロジェクト、スクリプトを新規に作成します。
[プロジェクト名]:ExcelDB連携(任意)
[スクリプト]:Excel2DB(任意)
ツールパレットから「ファイル」-「Excel」-「シートから読み取り」をスクリプトキャンバスにドラッグ&ドロップします。
「新規シートから読み取り処理」プロパティ設定ダイアログで、以下の通り設定を行います。
[名前] :Excel読み取り処理(任意)
[ファイル] :「/data/work/売上データ.xlsx」
[シート名] : 売上データ
[列一覧の更新]を押下し、 [列一覧]を自動生成します。
次に、「読み取り設定」タブを選択します。
シートの1行目はヘッダ情報であるため、[最初の行は値として取得しない]にチェックを入れます。
[完了]を押下すると、プロパティ設定ダイアログが閉じ、「Excel読み取り処理」アイコンがキャンパスに配置されます。
以上でExcelからのデータ読み取りは完了です。
ツールパレットから「データベース」-「PostgreSQL」-「テーブル書き込み」をスクリプトキャンバスにドラッグ&ドロップします。
「新規テーブル書き込み処理」プロパティ設定ダイアログで、以下の通り設定を行います。
[名前] :PostgreSQL書き込み処理(任意)
[入力データ] :Excel読み取り処理
[接続先] : PostgreSQL13接続設定
[テーブル名] :test.testdb
[キーと値と一致する行は更新]にチェックを入れ、[スキーマ定義]で[列名]が「製品コード」の行の[キー]にチェックを入れます。
[完了]を押下すると、プロパティ設定ダイアログが閉じ、「PostgreSQL書き込み処理」アイコンがキャンパスに配置されます。
Excelデータ連携前の「test.testdb」テーブルの中身を確認します。
「PostgreSQL書き込み処理」アイコンをダブルクリック、またプロパティ設定ダイアログで[テーブルブラウザの起動]を押下し、テーブルブラウザを開きます。
「テーブル一覧」で「test.testdb」を選択、また右ペインの「テーブル内容」タブを押下して、テーブル内のレコードを表示します。
Excelデータ連携前の「test.testdb」テーブルに、何もデータが入っていないことが確認できました。
Mapperを追加し、「注文個数と単価から注文金額を求める」という演算を行います。
データフローを右クリックし、メニューから「マッピングの追加」を選択します。
Excel読み取り処理と PostgreSQL 書き込み処理の間にドキュメントMapper が配置されます。
配置された「mapping」アイコンをダブルクリックし、Mapperエディタを開きます。
注文金額の計算を行うマッピング定義を作成します。
Mapper エディタのツールパレットから「数値」-「演算」-「掛け算」をマッピングキャンバスにドラッグ&ドロップします。
次に、マッピングリンクを作成します。
「注文数」、「単価」をそれぞれ掛け算ロジックアイコンにマッピングリンクを引きます。
また、掛け算ロジックアイコンを出力データの「注文金額」にマッピングリンクを引きます。
以上でマッピングの完成です。
処理の順番にプロセスフローを引きます。
(「Start」→「Excel読み取り処理」→「mapping」→「PostgreSQL書き込み処理」→「End」の順)
[デバッグ実行の開始/再開] を押下して処理を実行します。
出力データがPostgreSQLに書き込まれているか確認します。
また、連携した「/data/work/売上データ.xlsx」のシート「売上データ」の内容と差異が無いか、注文金額のマッピングで計算された金額が正しいかを確認します。
作成したスクリプトをトリガーから呼び出すために、プロジェクトをサービスとして登録します。
[ファイル]メニューの[プロジェクトをサービスとして登録]を選択します。
[サービス名]の値は変更せず、[完了]を押下します。
「サービスの登録」ダイアログが表示されるので、[OK]を押下します。
何でもお気軽にご質問ください