【マテリアライズクエリ】複数のデータソースからひとつのデータプールを作ってみる

**[Sharperlight](https://sharperlight.jp/)マテリアライズクエリ**は、複数データソースからのデータ統合などに利用できます。
この記事では、会社別にデータベースが存在するSAP Business Oneを使用します。
ユニオンクエリを作成して、ひとつのクエリ定義で米国本社と豪州支店のデータを抽出し、マテリアライズクエリデータベースにプールします。
## マテリアライズクエリの作成
Sharperlightアプリケーションメニューから**マテリアライズクエリ**を起動します。
![2022-03-12 Figure 01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/13c52cea-0cc7-3501-bb92-fb7a79a5354a.png)
[新規]アイコンをクリックし、マテリアライズクエリデータベース(以下 MQデータベース)を作成します。
:bulb:**MQデータベースは、Sharperlightシステムデータベースが存在するデータベースサーバー内に作成されます。**
![2022-03-12 Figure 02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/e96b7bc8-3e32-1cc3-ea30-5c4ca7b345c6.png)
![2022-03-12 Figure 03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c806a191-6e5b-f410-b928-a05aa62f411b.png)
作成されたら、**コード**、**タイトル**を変更します。[適用]ボタンを押して確定します。
![2022-03-12 Figure 03-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/9244e012-9cf2-a340-4086-9face6625e85.png)
SQLサーバーマネジメントスタジオでデータベースサーバーを覗いてみます。MQデータベースが確認できます。
![2022-03-12 Figure 04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/8d7b53cc-83b3-60b3-e4ae-23da5bccf563.png)
次に[テーブル編集]ボタンを押して、集めたデータをプールするテーブルを作成します。[新規]ボタンで開始します。
![2022-03-12 Figure 05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/929d4fc3-30b2-8d3b-67a2-d8c55e79dacd.png)
[クエリビルダ] ([Sharperlight](https://sharperlight.jp/)製品群内で共通のクエリ設計ツール)が開きます。クエリの定義がそのままテーブルの定義になります。
![2022-03-12 Figure 06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/49672d4e-847e-3d86-a334-71142ce84f0a.png)
[プレビュー]ボタンでクエリの確認！確認が済んだら[OK]を押してクエリを確定します。
![2022-03-12 Figure 07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0326b5cc-096d-5471-7847-07e469202c30.png)
いくつかの確認メッセージが表れます。[OK]、[Yes]と進みます。
![2022-03-12 Figure 08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/99f254e6-35ac-7192-3716-d1f8585c9a4f.png)
![2022-03-12 Figure 09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5801a1c3-f062-948f-0fe1-d4edbb0e5c74.png)
テーブルが作成されます。ダブルクリックでテーブルの編集ダイアログを開きます。
![2022-03-12 Figure 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ab3b7127-3c4c-2be5-eda3-4edd12f954c6.png)
**コード**と**タイトル**を設定します。
![2022-03-12 Figure 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/45223fad-75dc-3505-cb90-dc03d1e19c43.png)
[テーブルの詳細]タブに移動するとテーブルの構造定義が拝見できます。
![2022-03-12 Figure 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0b1e687d-8bd4-2091-5f10-781cd2e2a66c.png)
自動付与されるテーブルIDがそのままテーブル名に使用されます。
![2022-03-12 Figure 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0cbfd69c-2372-d61b-4f9b-2328756879cf.png)
編集ダイアログを閉じます。メッセージが表示される場合がありますが[Yes]で先に進みます。
![2022-03-12 Figure 14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/297ba38d-95fb-94af-895e-8b08c3bdec12.png)
実際のMQデータベースを覗いてみます。テーブルが作成されていますね。これで準備完了。
![2022-03-12 Figure 15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/a4da9bed-f3fd-e00f-843f-20209c01bcef.png)
## MQテーブルのデータの更新
テーブルを選択した状態で右クリックメニューを表示します。[データの更新を実行]を選びます。
![2022-03-12 Figure 16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c3dbb432-411c-e4cc-0a47-12641bc984a3.png)
MQテーブルで定義したクエリが動き、データソースであるSAPの米国と豪州のデータベースからデータが抽出され、MQデータベース内のテーブルに保存されます。
![2022-03-12 Figure 17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/21c76760-68de-bce7-9376-4dc6228e8a3b.png)
![2022-03-12 Figure 18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/7e39714a-b99d-fc8b-b24e-17d780f57c0a.png)
## マテリアライズクエリのデータを抽出
Sharperlightアプリケーションメニューから**クエリビルダ**を開きます。
![2022-03-12 Figure 19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/eeafebff-4917-5538-40db-b15eadcc8506.png)
[フィルター]領域の[製品]検索を開きます。先ほど作成したマテリアライズクエリが見えます。それを選択します。
![2022-03-12 Figure 20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/e8501174-9f3c-201c-4aec-618641b5e395.png)
[テーブル]検索では、対象マテリアライズクエリ内のテーブルリストが見えます。今回はひとつのみです。
![2022-03-12 Figure 21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/82f028ed-a53a-ee3b-61ed-c55ecdb0bf40.png)
会計期フィールドと金額フィールドを出力してみます。会計期別の売上金額の合計が表示されます。
更に会社名による動的出力オプションが設定されているので、この例では米国と豪州の出力フィールドが動的に作成されます。
:bulb:**動的出力オプション**についてはまた別の記事で詳しく書きます。
![2022-03-12 Figure 22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ca37bd41-5e0b-b790-5a1f-b45aec1fdf02.png)
プレビューをすると...、ほらこんな感じ。比較が簡単に行えますね。
![2022-03-12 Figure 23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/a08872b8-8630-817e-080f-60b4f1186f39.png)
## あとがき
今回はマテリアライズクエリの概要を簡単に書くことが目的でしたので、MQデータベースもMQテーブルも自動付与されたIDが名称の一部になりました。しかし、それではデータベースやテーブルが何を意味するのか不明で、データベースを管理する人には厄介なものになります。後日、名称の変更方法については記事として取り上げていきます。
更にデータの更新では、ただ単純にテーブル内のデータを削除して、新たに抽出したデータを書き込んでいます。抽出するデータもフィルター値が一定のため、毎回同じデータセットです。こういったところも他にいくつかの機能がありますので、後日記事にしていきます。
またスケジューリングも可能なので、その詳細も記事にします。
:postbox:[Sharperlight](https://sharperlight.jp/)