Integration Servicesでデータのロードとインデックスの再構築を行う [SSRS with Bing Maps #4]

こんばんは。佐久間です。
半月ぶりの更新です。

「Reporting ServicesとBing MapsでWEB上のHTMLデータを可視化するレポートを作成する」

第4回目は変換処理済みのWorkテーブルのデータでレポート用のテーブルを満たします。
(目次はこちら)

2. データを取得・加工する:Integration Services

2-1. 抽出(Extract)
 2-1-1 HTMLからデータを抽出してTSVを作成する
 2-1-2 ワークテーブルを空にする
 2-1-3 TSVからSQL Serverへデータをインポートする
 
2-2. 変換(Transform)
 2-2-1 都道府県IDを付与する
 2-2-2 最大震度IDを付与する
 2-2-3 座標データをGeography型に変換する
 
2-3. ロード(Load) ←今回
 2-3-1 インデックスを無効化する
 2-3-2 ワークテーブルのデータでレポート用テーブルのデータを洗い替える
 2-3-3 インデックスを再構築する

 
[ロード(Load)]
 
2-3-1 インデックスを無効化する

Workテーブルからデータをロードする前にまずインデックスを無効化します。
もちろん無効化しなくてもデータのロードは可能ですが、
インデックスが有効な状態でのInsertには多少コストがかかるので一時的に無効化しておきます。

処理の実行は毎度おなじみSQL実行タスクです。

SQL実行タスク

ストアドはこちら。

CREATE PROCEDURE dbo.DisableIndexes
AS
BEGIN
  SET NOCOUNT ON;
  -- TODO:インデックスの無効化
END

今はまだ無効化する非クラスタ化インデックスを作成していないのでTODOのみです。
対象となるインデックスはレポートのデータを取得するSQLを書く時に作成しますが、
SSISのタスクに予めストアドを仕込んでおけばストアドを更新するだけで処理を補完できるようになります。


2-3-2 ワークテーブルのデータでレポート用テーブルのデータを洗い替える

ついにレポート用のテーブルにデータをロードする処理がやってまいりました。
処理はもちろんSQL実行タスクで。
SQL実行タスク
CREATE PROCEDURE dbo.LoadData
AS
BEGIN
  TRUNCATE TABLE dbo.地震データ;
  INSERT INTO dbo.地震データ(
    日時, 北緯, 東経, 座標, 震源, 都道府県ID, 深さ, マグニチュード, 最大震度ID
  )
  SELECT
    日時, 北緯, 東経, 座標, 震源, 都道府県ID, 深さ, マグニチュード, 最大震度ID
  FROM dbo.Work;
END

これだけ。
ここまで長かった割にはとても地味なクエリですね。
削除方法はDELETEでもよいですが、ID列を作ってあるのでTRUNCATEにしました。

2-3-3 インデックスを再構築する

あとはインデックスを再構築して再び有効にします。
これを忘れてはいけません。

再構築はいつもの通りSQL実行タスクを使用しても実施できますが、
今回はメンテナンスプランのタスクを紹介します。
メンテナンスプランはManagement Studioから設定できるメンテナンス用のタスクで、
SQL Server Agentを利用してスケジュール実行できるため運用上とても便利な機能です。
インデックスの再構成・再構築はもちろん、統計の更新やDBの圧縮、整合性の確認、バックアップなどが行えます。
中でも特徴的なのは「オペレーターへの通知タスク」です。
電子メール・ポケベル・Net Sendコマンド(WindowsMessenger)での通知機能を提供します。
中身はSSISのタスクそのものなのでSSISのプロジェクトでも使用できます。

少し脇道にそれてしまいましたが「インデックスの再構築タスク」を使います。

インデックスの再構築タスク

タスクを配置し、右クリックの編集メニューから設定を行います。

デザイナ上に配置されたタスク
データベースの選択

接続先を設定したら処理対象のデータベースを選択します。
※メンテナンスタスクの特性上複数のDBを対象に一括処理することも可能

対象を選択

テーブルを選択

対象をテーブルのみにし、地震データテーブルを選択して設定完了です。

– 動作確認 –

今回設定したタスクをデバッグしてみましょう。

タスクのデバッグ

上記のようにすべてのタスクが緑になれば動作確認もOK。

以上でSSISでのETL処理の設定が完了しました。
最後はVS以外からの起動方法です。

– GUIからの起動 –
SQL Serverのインストーラーに付属しているExecute Package Utility(DTExecUI.exe)を使用すると
GUIからSSISのパッケージを実行できます。
※SSISのパッケージはSSISプロジェクトをビルドするとbinフォルダに作られます。

Execute Package Utility(GUI)

今回のようなシンプルな構成であれば、パッケージ ソースの項目にファイルシステムを選択し、
パッケージのパスを指定するだけ実行できます。
※処理結果の表示順がタスクの順番とは異なっていますが、指定した順番に処理されます。

SSISパッケージ実行結果

 
– コマンドラインからの起動 –
GUIと同じくインストーラーに付属のDTExec.exeを使用するとコマンドラインから実行できます。

DTExec.exe /FILE "パッケージのパス"

 
本日は以上です。
次回はReporting ServicesでBing Mapsと連携したレポートの作成に取り掛かります。


ネクストスケープ企業サイトへ

NEXTSCAPE

検索する

タグ

メタデータ

投稿のRSS

著者

データベースの中のデータはその企業の財産のはず。
しかし現実にはユーザー自身が自由に見れないことが多い。

データを未来のために活かせる状態にすることを求めるエンジニアです。
「sakuma」さんの全ポストを読む