JPSPS 東京運営を手伝って -4-

前回は「SharePointクイズ大会用アプリ」でした。

今回は「データ管理」について書いていきます。

作成物 利用した製品/サービス
データ管理 ・SharePoint Online リスト
・SQL Azure
・Azure Machine Learning
・Cloud Business App

改めてですが、IT化のポイントは下記です。

  • 簡単に作れる = コーディング量を極力少なくする
  • なるべく多くのサービス/製品/ツールを検討して、使えるなら一部でも利用する

もしかすると「無駄」に見えるところがあると思います。が、意図がありますのでご理解いただけると幸いです。

さて、今回のデータ管理は、下記の絵で言うと・・・
アクセス・データ管理」と、「クイズ アプリ」から行っている「データ変換」の部分です。

image

Accessからのデータは全て SharePoint Online のリストに格納しています。
#Accessとの接続については「その2」にも記載していますので参照ください。

なぜデータを SharePoint リストに格納しているのか

  • 標準でもOffice製品との連携が容易
  • データへのアクセス権管理が可能
  • データの検索が可能
  • JPSPSというSharePoint関連のイベントだから(冗談)

このあたりの理由が大きいです。
SharePointをインフラとして位置づけると、アクセス権や検索、ある程度の型指定が出来るので、(他のRDBと比べると)お手軽なデータ格納先として利用するのはアリです。

もちろんデメリットもあります。

単純にデータ格納の制限値では無く、SharePointという製品サービスを提供する上での制限値と捉えるといいかと思います。

オンプレミスの事例ですが、数十万件のデータをリストに格納しているところもあります。
この場合、SharePointの提供するビュー画面ではフィルターなどが正常に動作しませんが、Accessとリンクしてデータを扱う場合、不具合は特にありませんでした。

だからと言って、率先して大容量のデータを格納させることはNGです。
特にSharePointの機能を利用しようとしている、
最初から大容量と分かっている場合等は素直になにかしらのDBの利用を検討してください。

実際の業務で利用するのかどうかは(SIerさんやコンサル屋さんと)相談して決めていければいいとして、とりあえず自分でなにか作ってみたい。そんなに大容量じゃない。でもDBサーバーを社内に立てるのが大変。

あ!SharePointがあった!」みたいなノリでも便利かもしれません。
#管理者からすると容量が先読みしにくくなるので嫌かもしれないですが・・・

ETL(Extract/Transform/Load)は何を?

最終的にExcelで集計を行いたいので、SQL Azureのデータもリストに移送します。

このデータを移送するにあたって、整形を行います。

普通こんなちっぽけな規模だと、SQL一発で整形処理を行うことが多いです。
もしくは、Excelに取り込んでから整形することもあります。
#こんな規模だとわざわざETLの仕組みを使いません

でも、逆にせっかくなので、ETLを行えるサービスを使ってみようと思います。
(変な日本語)

普通にマイクロソフト系のサービスを考えると、「SSIS:SQL Server Integration Services」が使えれば簡単なんですよね。
んー、でもAzure上に準備するのもいまいちだし、BizTalk使うのも悪くは無いけど、どっちにしろ欲しい感じのサービスじゃないので却下。

何を利用するか少し考えたのですが・・・
たまたま資料を読んでいた「Azure ML:Azure Machine Learning」の一部機能が使えるんじゃないかと閃いてしまいました。

Azure MLの特徴として、

  • ETLとしての機能を含んでいる
  • 各パラメーター(Experimentsの起動も)がWebサービスとして定義可能
  • サービスとして提供されている

特に2番目の「Webサービスとして定義可能」によって、他アプリから起動することも、その際にパラメータを設定することも容易に出来ることがポイントが高かったです。

Azure MLについては下記サイトあたりを参照ください。
Cloud Services – Machine Learning   Microsoft Azure
Webブラウザーでできる機械学習Azure ML入門

Azure MLによるデータ整形

わざわざ載せるのが恥ずかしい内容なのですが・・・

二つほどデータ接続を配置しています。その後Joinして書き出しているだけ・・・

image

あぁ、特に説明するところが無い。それでも無理に書くと。

 

  1. 読み取りデータ接続
    左側の[Data Input and Output]より Readerボックスを配置します。
    SQL文は複数行記載できます。
    下記では 書き出しテーブルデータをいったんDeleteして Select処理を書いています。
    image
     
  2. 結合処理
    左側の[Data Transformation]-[Manipulation]より Joinボックスを配置します。
    プロパティ設定で結合フィールドやタイプを選択します。
    image
     
  3. 書き出しデータ接続
    左側の[Data Input and Output]より Writerボックスを配置します。
    書き出し先、サーバー名、DB名、カラムといった情報をセットして完了。

ホント勿体ない使い方ですね。
目玉(というかコア)であるMLは全く使わず、ETLだけの利用です。

ただ、別の製品やサービスを使うより非常に短時間で作成して利用できているので、場合によってはアリかなと思っています。

今回は、用意したExperimentsをWebサービス経由で呼び出して利用しています。

Experimentsの呼び出し

Cloud Business アプリについての詳細は省きます。
詳細は下記のようなサイトを参照ください。

Visual Studio 2013 – Visual Studio 2013 で Office 365 クラウド ビジネス アプリを構築する

画面デザイナーは簡単すぎて感動できます。

さて、Azure MLのExperimentsの呼び出しですが、Web Servicesのダッシュボードより API Keyを取得します。

image

後は HTTPClientの Authorizationに AuthenticationHeaderValue をAPI Key付きで生成。PostするとExperimentsが動作開始!という感じですね。

処理完了後、整形されたデータを取得し、リストに流し込むまでが一処理になります。

説明がえらい簡素になっていますが、この題材(JPSPSのお手伝い)では ソースコードを公開して云々ではなく、「こんな事が出来るんや。へー」が伝わればいいと思っています。

より詳細な話が聞きたい人は、個別で(機会があれば)。

Akira Fukami

  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA