PR
図4●サンプルで作成するデータフロー
図4●サンプルで作成するデータフロー
[画像のクリックで拡大表示]
図5●パッケージの開発
図5●パッケージの開発
[画像のクリックで拡大表示]
図6●開発したパッケージの実行
図6●開発したパッケージの実行
[画像のクリックで拡大表示]

パッケージを開発して使う

 では,実際の使い方に入ろう。Integration Servicesでは,前述のようにパッケージという一種のプログラム(実際にはXML)を開発してデータのETL機能を実現している。

 ツールには「BI Development Studio」を利用する。これは,SQL Server 2005で標準提供されるビジネス・インテリジェンス(BI)・ソリューション開発のための統合環境で,Integration Servicesに加え,Analysis ServicesおよびReporting Servicesのプロジェクト開発が可能である。Visual Studio 2005の統合開発環境を利用して作られており,パッケージの開発とデバッグの両方ができるようになっている。

 BI Development Studioでは,「制御フロー」と「データフロー」をGUI(グラフィカル・ユーザー・インターフェース)ベースで開発できる。ここでは,図4([拡大表示])にあるデータフローを実装する手順を紹介しよう。作成したい処理は以下の通りである。

(1)[フラットファイルからの変換]コンポーネントによって,データ・ソースとして用意したフラット・ファイル(CSV形式*)から,以下のような半角/全角の商品名が混じったデータを読み込む。
 オレンジジュース,150,1000
 アップルジュース,150,300
 ビール,350,1500
 ワイン,500,200
 このデータは左から「商品名」「単価」「個数」の順に並んでいる。
(2)[データ変換]コンポーネントによって読み込んだデータに対して,適切なデータ型を定義する。
(3)[文字マップ表]コンポーネントで半角カタカナの文字を,全角に変換する。
(4)[派生列]コンポーネントで数量と単価を掛けて,新カラム(派生列)「売上」にその結果を格納する。
(5)[条件分割]コンポーネントで「売上」カラムの値が10万円以上と未満の場合で処理を分岐する。
(6)[SQL Serverへの変換]コンポーネントによって,条件分岐後の最終データをSQL Server上のテーブルに格納する。

 これをIntegration Servicesにパッケージとして実装するときの作業の流れは以下のようになる。

 まず制御フローを作る。この例では,複雑な並列処理はないが,制御フローからデータフローを呼び出すアーキテクチャであることを思い出されたい。従って最初に制御フローでデータフローを呼び出すタスクである[データフロータスク]を定義する。

 操作としては,BI Development Studioのパッケージ・デザイナにて,[制御フロー]タブを選択する(図5(a)[拡大表示])。そして,ツールボックスから[データフロータスク]をドラッグ&ドロップして「デザイナ」というスペース上に配置する(図5(b)[拡大表示])。制御フローはこれで完成だ。

 次は,[データフロータスク]で制御するデータフロー・コンポーネントの各処理を定義する。

 [データフロータスク]をダブル・クリックし,データフローのデザイン画面を呼び出す。タブが[データフロー]に切り替わっていることを確認しよう(図5(c)[拡大表示])。

 続いてツールボックスから[フラットファイルからの変換]コンポーネントをデザイナ上に配置する(図5(d)[拡大表示])。さらに[フラットファイルからの変換]コンポーネントをダブル・クリックし,フラット・ファイル変換元エディタを起動して,データ・ソースであるCSVファイルを指定する(図5(e)[拡大表示])。この時点で,自動的に区切り文字を認識し,フラット・データから構造化データへの変換を行う準備が整う。

 さらに,ツールボックスから[データ変換]コンポーネントをドラッグ&ドロップでデザイナ上に配置する。先ほど配置した[フラットファイルからの変換]コンポーネントから出ている緑色の矢印(成功時のパス)を,[データ変換]コンポーネントにつなげてパスを設定する(図5(f)[拡大表示])。

 続いて[データ変換]コンポーネントをダブル・クリックし,データ変換エディタを起動,読み込んだデータに対して,適切なデータ型を定義する。ここでは,「商品名」を文字列型,「単価」を通貨型,「個数」を数値型にしている(図5(g)[拡大表示])。

 デザイナに戻って,今度はツールボックスから[文字マップ表]コンポーネントをドラッグ&ドロップによって配置する。やはり[データ変換]コンポーネントから出ている緑色の矢印(成功時のパス)を,[文字マップ表]コンポーネントにつなげてパスを設定する(図5(h)[拡大表示])。

 次に[文字マップ表]コンポーネントをダブル・クリックし,文字マップ変換エディタを起動,「商品名」という列のデータを「全角文字」に変換する処理を定義する(図5(i)[拡大表示])。

 さらに,ツールボックスから[派生列]コンポーネントをドラッグ&ドロップでデザイナ上に配置する。[文字マップ表]コンポーネントから出ている緑矢印(成功時のパス)を,[派生列]コンポーネントにつなげてパスを設定するところはやはり同じである(図5(j)[拡大表示])。

 続いて[派生列]コンポーネントをマウスでダブル・クリックし,派生列変換エディタを起動し,数量と単価を掛け算した結果を,新しいカラム(派生列)「売上」に格納するように設定する(図5(k)[拡大表示])。

 最後は条件分岐の設定である。ツールボックスから[条件分割]コンポーネントをドラッグ&ドロップでデザイナ上に配置し,[派生列]コンポーネントから出ている緑色の矢印(成功時のパス)を,[条件分割]コンポーネントにつなげてパスを設定する(図5(l)[拡大表示])。それから[条件分割]コンポーネントをマウスでダブル・クリックし,条件分割変換エディタを起動,「売上」カラムの値が10万円以上の場合と10万円未満の場合とに2分岐するように設定する(図5(m)[拡大表示])。

 ツールボックスから[SQL Serverへの変換]コンポーネントをドラッグ&ドロップでデザイナ上に配置,同じ操作を繰り返して,2つの[SQL Serverへの変換]コンポーネントを配置する(図5(n)[拡大表示])。[条件分割]コンポーネントから出ている緑矢印(成功時のパス)を,[SQL Serverへの変換]コンポーネントにつなげてパスを設定すると,入出力の選択ダイアログが起動する。そこで出力として[条件分割]コンポーネントで設定した,分割定義(ここでは「十万以上」)を選択する(図5(o)[拡大表示])。

 同じ操作を繰り返して,もう一方の分割定義(ここでは「十万未満」)を選択し,2分岐のパス設定を完了させる(図5(p)[拡大表示])。

 さらに[SQL Serverへの変換]コンポーネントをダブル・クリックし,SQL変換先エディタを起動,最終的にデータを格納するデータベースとテーブルの情報を設定しよう。ここでは「売上」が10万円以上のテーブルと,10万円未満のテーブルをそれぞれ設定している(図5(q)[拡大表示])。

 SQL変換先エディタのマッピング設定で,データフローの各カラムと,SQL Serverのテーブルのカラムとのマッピングを行う(図5(r)[拡大表示])。ここでもやはり「売上」が10万円以上のテーブルと,10万円未満のテーブルをそれぞれ設定している。

 開発が終わったらパッケージを実行しよう。条件分割コンポーネントの直前のパスに,データ・ビューアを仕掛け,実行時に正しいデータが流れていることを確認しておく。[派生列]コンポーネントと[条件分割]コンポーネント間のパスをダブル・クリックしてデータフロー・パス・エディタを起動,データ・ビューアとしてグリッド(表)を指定する(図6[拡大表示]の(a))。

 それからデバッグ・メニューで[開始]を選択し,実行しよう。実行中のコンポーネントは黄色,正常終了したコンポーネントは緑,失敗したコンポーネントは赤---でそれぞれ表示される(図6[拡大表示]の(b))。

パッケージを配置するツールも用意

 ここまで紹介した内容で,Integration Servicesパッケージの開発は非常に簡単であることを理解いただけたと思う。もちろん,実際にはパッケージを開発する環境と,それを実行する環境は同じとは限らない。そこでIntegration Servicesでは,実際に開発したパッケージを運用環境に移行するためのツール「パッケージ配布ユーティリティ」を提供している。

 これはIntegration Servicesのプロジェクトのプロパティ(CreateDeploymentUtility)をTRUEに設定することにより,プロジェクトをビルドするタイミングで,自動的にパッケージ配布のための実行イメージ(インストール・モジュール)を指定したフォルダに展開できる機能だ。インストール・モジュールを,パッケージを展開した環境に移行後,実行するだけで簡単にパッケージをSQL Serverに配置可能である。また,配布されたパッケージは,SQL Serverエージェント*との統合により,任意のスケジュールで実行可能になる。

 ここでは誌面の関係上,すべての機能を紹介できたわけではないが,少なくともIntegration Servicesの開発生産性の高さについては実感いただけたのではないだろうか。開発生産性をさらに高める仕組みとして,カスタムのタスクやカスタムのコンポーネントを開発するためのAPIや,パッケージ自体をアプリケーションに組み込むことが可能なAPIなども提供される。

 また,紹介してきた通り,包括的で容易な管理・開発環境の提供や,パフォーマンス向上などの大規模対応,データ・プロバイダの拡張や複雑なデータ・ルーティングに対応するなど様々な機能拡張がなされている。このようにIntegration Servicesは,単なるETLツールの枠を超え,「エンタープライズ・レベルのETLプラットフォーム」へ進化している。データ統合のためのツールを必要としている方は,ぜひ一度このIntegration Servicesを評価してほしい。

斎藤 泰行

マイクロソフト
サーバープラットフォームビジネス本部
アプリケーションプラットフォームグループ
シニアプロダクトマネージャ