この記事では「CData Arc ハンズオンセミナー ~はじめてのCData Arc~」の「シナリオ2-2」について進めていきます。
ハンズオンのシナリオ
クラウドストレージやFTP/SFTP でファイル連携で取得したファイルの中身(ファイルに格納されているデータ群)をDB やSaaS に連携するのは、よくあるシナリオです。
このシナリオではシナリオ2-1 で作成したファイル連携フローの応用として、Box から取得(ダウンロード)したCSV ファイルのデータをMySQL に更新(Upsert)します。
Box の構成
このシナリオでは、Box にあるCSV ファイルを取得(ダウンロード)します。
Box にあるCSV ファイルの構成
Box にあるCSV ファイルは以下のような構成になっています。
MySQL の構成
このシナリオでは、ハンズオン実行環境に構成されているMySQL のhandson スキーマの「商品」テーブルにデータを登録・更新します。
連携フローの概要
このシナリオでは、このような連携フローを作成していきます。
|
コネクタ |
設定内容 |
| 1 |
Box |
Box からCSV ファイルを取得(ダウンロード) |
| 2 |
CSV |
CSV 形式からXML 形式へ変換 |
| 3 |
XMLMap |
2 と4 をマッピング |
| 4 |
MySQL |
MySQL へUpsert(データを更新) |
ワークスペースの作成
CData Arc では、目的の異なる連携フローを分離できるように、任意の「ワークスペース」を作成することができます。ワークスペースを作成するにはフローページの「ワークスペースを追加」をクリックします。
ワークスペース名には任意の名称を設定することができます。何のためのワークスペースか、分かりやすい名前を設定します。ここでは「Box_to_MySQL」と設定します。
このシナリオでは、この「Box_to_MySQL」ワークスペースにフローを作成していきます。
Box コネクタ
最初に「Box からCSV ファイルを取得(ダウンロード)」するBox コネクタを設定します。この連携フローのはじまり(起点)となるコネクタです。
コネクタは右上の「+追加」から選択や検索をして追加することができます。またフローキャンバス上での右クリックなどからも追加することができます。
コネクタID には任意の名称を設定することができます。何を行うコネクタか、分かりやすい名前を設定します。ここでは「Box_ProductCSV_Download」と設定します。
このコネクタが実行するアクションも指定します。ここではデータを受信するための「受信」アクションを選択して「+コネクタを作成」します。
接続
最初にBox への接続を確立します。Box コネクタでは、Box との接続をOAuth 認証で確立します。「接続」をクリックすると、ブラウザが起動しBox のログインページが表示されます。
以下の情報を入力して承認します。
| 項目 |
内容 |
| メールアドレス |
ハンズオン環境のクレデンシャル情報に従って設定します |
| パスワード |
ハンズオン環境のクレデンシャル情報に従って設定します |
Box アカウントへのアクセスをCData Arc に許可するか確認されます。「Box へのアクセスを許可」します。
「Success!」と表示されれば成功です。
受信(ダウンロード)設定
CData Arc のBox コネクタでは、Box からのファイル受信(ダウンロード)やBox へのファイル送信(アップロード)を行うことができます。
このシナリオでは、受信(ダウンロード)に必要な以下の情報を設定をします。
| 項目 |
内容 |
| リモートフォルダ |
Handson |
| ファイルマスク |
Product.csv |
CData Arc のBox コネクタには、前回ダウンロードして以降に更新のあったファイルのみを取得する「キャッシング」機構が備わっています。デフォルトで「タイムスタンプ比較」によるキャッシングが有効になっていますが、このハンズオンでは無効にしておきます。
「保存」をクリックして、コネクタの設定を保存します。これでBox コネクタの設定は完了です。
取得(受信)のテスト
実際にファイルを受信(ダウンロード)できることを確認してみます。「アウトプット」タブの「受信」をクリックします。
Box コネクタでは、受信(ダウンロード)したファイル単位にメッセージファイルとして生成されます。
メッセージファイル名をクリックすると、データを確認することができます。「メッセージをダウンロード」でメッセージファイルをダウンロードしておきます。このメッセージファイル(Box からダウンロードされるCSV ファイル)は、後続のCSV コネクタの「テストファイルをアップロード」で利用します。
テストで取得(受信)したメッセージやログは、選択して「削除」できます。
CSV コネクタ
次に「CSV 形式からXML 形式へ変換」するCSV コネクタを設定します。CData Arc は、データの操作と変換の中間形式としてXML を使用します。多くのコネクタは、さまざまな形式のファイルをXML に、またはその逆に変換します。CSV コネクタもその1つです。
コネクタは右上の「+追加」から選択や検索をして追加することができます。また構成したコネクタの後続に設定したいコネクタは、作成したコネクタのアウトプットにある「+」からも追加することができます。今回は作成したコネクタのアウトプットにある「+」からコネクタを追加してみましょう。
コネクタID には任意の名称を設定することができます。何を行うコネクタか、分かりやすい名前を設定します。ここでは「CSV_to_XML」と設定します。
CSV の設定
このシナリオで扱うCSV ファイルは、1行目がそれぞれの列の名前を表すヘッダー行になっています。そのため、ここでは「カラムヘッダーが存在します」を有効にします。
「保存」をクリックして、コネクタの設定を保存します。
テストファイルをアップロード
多くのデータ連携フローでは、CSV コネクタはXMLMap コネクタと組み合せて利用されます。CSV ファイルがフローへの入力である場合、CSV コネクタはCSV ファイルをXML に変換し、そのXML をXMLMap コネクタに渡して変換します。逆に、CSV ファイルがフローからの出力である場合、CSV コネクタは XMLMap コネクタからXML を受け取り、それをCSV ファイルに変換します。
CSV コネクタを設定しただけでは、CSV コネクタから出力されるXML のデータモデル(mapping)は判断することができません。そのため後続となるXMLMap コネクタでは、ソースファイルとして出力される予定のXML の構造を記したファイルをアップロードする必要が生じますが、CSV コネクタには、XMLMap コネクタでのマッピングするプロセスを簡素化するための「テストファイルのアップロード」機能が含まれています。ここでは「テストファイルのアップロード」を利用します。
CSV コネクタの「インプット」タブにある「その他」を選択して「テストファイルをアップロード」をクリックします。
「マッピングテストファイルをアップロード」ダイアログで「ファイルを選択」から、先ほどBox コネクタでダウンロードしたCSV ファイルを指定して「アップロード」します。(先ほどダウンロードしたCSV ファイルを「ダウンロード」ディレクトリから選択します)
「サンプルファイルがアップロードされました。…」と表示されれば「テストファイルをアップロード」機能を利用して、このCSV コネクタが出力(アウトプット)する予定のXML のデータモデル(mapping)生成に成功しました。
これでCSV コネクタの設定は完了です。
これでBox コネクタで取得(ダウンロード)したCSV ファイルがCSV コネクタでにインプットされ、XML へ変換されるようになります。
MySQL コネクタ
次に「MySQL へUpsert(データを更新)」するMySQL コネクタを設定します。この連携フローのおわり(終点)となるコネクタです。
コネクタは右上の「+追加」から選択や検索をして追加することができます。またフローキャンバス上での右クリックなどからも追加することができます。今回はフローキャンバス上での右クリックから「+コネクタを追加」してみましょう。
コネクタID には任意の名称を設定することができます。何を行うコネクタか、分かりやすい名前を設定します。ここでは「MySQL_Product_Upsert」と設定します。
このコネクタが実行するアクションも指定します。ここではデータを更新するための「Upsert」アクションを選択して「+コネクタを作成」します。
接続の設定
MySQL への接続情報を設定します。こちらの記事 で作成した「接続」を利用します。「MySQL_Handson」を選択して「接続をテスト」します。
「接続テストが成功しました!」と表示されれば成功です。
アクション
MySQL へのアクション(実行する操作)は先ほど選択した「Upsert」アクションで構成されています。なお、あとからアクションを変更することもできます。
テーブル
MySQL へデータをUpsert するテーブルを選択します。「+追加」をクリックして「テーブルの追加」ダイアログを開きます。
「商品」テーブルを選択して「+追加」をクリックします。「テーブル」に「商品」が追加され、「カラム」に「商品」テーブルの列構成が反映されます。ここでは「Upsert の有効化」や「Upsert のKey」を細かく指定することができます。
ここでは、Upsert のKey に「商品コード」を選択します。これで同じ製品コードを持つデータは登録ではなく、既存データの更新として扱われます。
「保存」をクリックして、コネクタの設定を保存します。これでMySQL コネクタの設定は完了です。
XMLMap コネクタ
最後に「Box から取得したCSV ファイルのデータをMySQL の商品テーブルへマッピング」するXMLMap コネクタを設定します。
XMLMap コネクタは、CData Arc の中でも中核的なコネクタです。CData Arc は、データの操作と変換の中間形式としてXML を使用します。多くのコネクタは、さまざまな形式のファイルをXML に、またはその逆に変換します。さらにCData Arc はXML を使用してデータベースやSaaS などバックエンドシステムの入力と出力をモデル化します。この仕組みにより、様々なフォーマットのファイルやデータベース・SaaS などのバックエンドシステムをシームレスにつなぐことができます。
フローのコネクタ間に配置したいコネクタは、コネクタ間の「+」から追加することもできます。今回はCSV コネクタとMySQL コネクタのフローを結んだ後に、その間の「+」からXMLMap コネクタを追加してみましょう。
コネクタID には任意の名称を設定することができます。何を行うコネクタか、分かりやすい名前を設定します。ここでは「XMLMap_CSV_to_Product」と設定します。
ソースファイル・デスティネーションファイル
ここまでの操作で、ソース(ソースファイル)と宛先(デスティネーションファイル)には、CSV コネクタでアウトプットされるデータ構造と、MySQL コネクタにインプットされるデータ構造が選択されています。もし選択されていない場合は、マッピングのソースファイル(変換元)とデスティネーションファイル(変換先)にそれぞれ選択して設定します。
XML Map のマッピングエディタは豊富な機能を有しており、XML の値だけでなく属性(アトリビュート)も対象にすることができます。
ただ、このハンズオンのように値のみをマッピングするシンプルなシナリオだとXML の各項目の属性(アトリビュート)まで表示していると見通しがやや下がる面もあるかも知れません。そのようなときは「アトリビュートを非表示」にすることで各項目の値のみをシンプルに表示することができます。
マッピング
下記の項目を「ソース」から「宛先」にマッピングします。「Product」と「商品」がレコードごとにループする関係性になります。
| ソース |
宛先 |
| Product |
商品 |
| Code |
商品コード |
| Name |
商品名 |
| Type |
種別 |
| Price |
価格 |
| Description |
説明 |
マッピング(式エディタ)
XMLMap コネクタでは、フォーマッタや条件、カスタムスクリプトなどを利用した高度なマッピング機能も利用できます。ここでは「最終更新日時」に「現在日時」を取得してマッピングします。
「最終更新日時」項目の「ノードを編集」をクリックして、エクスプレッションエディタ(式エディタ)を開きます。
XMLMap の式エディタでは、ArcScript のフォーマッタを利用してマッピング中にデータを動的に編集・加工することができます。ここでは now フォーマッタを利用して「現在日時」を取得・設定します。
[now()]
CData Arc では設定したマッピングの結果をすぐにテストすることができる「テストマッピング」の機能が搭載されています。フォーマッタを利用して変換や編集をともなうマッピングを施している場合、その結果をすぐにテストできる「テストマッピング」の機能はとても便利です。「マッピングをテスト」をクリックするとマッピングテストダイアログが表示されます。
「テスト」をクリックすると、マッピングを実行した結果が「宛先」欄に出力されます。マッピングで設定した now() が動的に取得・設定できていることがすぐに確認できます。
「保存」をクリックして、コネクタの設定を保存します。これでXMLMap コネクタの設定は完了です。
フローの実行
これでシナリオの連携フローが完成しました。連携フローを手動で実行するときは、先ほどのように起点のコネクタでデータをアウトプット(受信)する以外に、トリガー開始の「手動で受信」からも実行することができます。今回はトリガー開始の「手動で受信」を実行します。
実行結果の確認
受信に成功(Success)したメッセージファイルは、オートメーションの機構により、後続のCSV コネクタに渡されます(インプットされます)。
コネクタ実行履歴の右端に表示される「詳細を表示」から、ログページ上で「フローの一連の流れ」として確認することもできます。
MySQL の「商品」テーブルの内容を確認してみます。MySQL Workbench で確認します。
フローの自動実行
CData Arc にはスケジューリング実行するための機能が標準で搭載されています。開発・テストが完了した連携フローを自動で定期的に実行したいときに便利です。スケジュール実行はフローの起点となるコネクタで「受信オートメーション」を有効にすることで設定します。
このシナリオのフローを、1時間に1度、毎時0分に自動実行する場合は、Box コネクタの「オートメーション」タブで下記のように設定します。
| 項目 |
内容 |
| 受信 |
有効 |
| 受信間隔 |
Hourly |
| 毎時何分 |
0 |
ここまでのまとめ
これで「CData Arc ハンズオンセミナー ~はじめてのCData Arc~」の「シナリオ2-2」が完了しました。
ハンズオンテキスト
シナリオ2-2
この記事では CData Arc™ 2024 - 24.3.9106.0 を利用しています。