こんばんは。佐久間です。
半月ぶりの更新です。
「Reporting ServicesとBing MapsでWEB上のHTMLデータを可視化するレポートを作成する」
第4回目は変換処理済みのWorkテーブルのデータでレポート用のテーブルを満たします。
(目次はこちら)
2. データを取得・加工する:Integration Services
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 インデックスを無効化する
もちろん無効化しなくてもデータのロードは可能ですが、
インデックスが有効な状態でのInsertには多少コストがかかるので一時的に無効化しておきます。
処理の実行は毎度おなじみSQL実行タスクです。
ストアドはこちら。
CREATE PROCEDURE dbo.DisableIndexes
AS
BEGIN
SET NOCOUNT ON;
-- TODO:インデックスの無効化
END
今はまだ無効化する非クラスタ化インデックスを作成していないのでTODOのみです。
対象となるインデックスはレポートのデータを取得するSQLを書く時に作成しますが、
SSISのタスクに予めストアドを仕込んでおけばストアドを更新するだけで処理を補完できるようになります。
2-3-2 ワークテーブルのデータでレポート用テーブルのデータを洗い替える
処理はもちろん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フォルダに作られます。
今回のようなシンプルな構成であれば、パッケージ ソースの項目にファイルシステムを選択し、
パッケージのパスを指定するだけ実行できます。
※処理結果の表示順がタスクの順番とは異なっていますが、指定した順番に処理されます。
– コマンドラインからの起動 –
GUIと同じくインストーラーに付属のDTExec.exeを使用するとコマンドラインから実行できます。
DTExec.exe /FILE "パッケージのパス"
本日は以上です。
次回はReporting ServicesでBing Mapsと連携したレポートの作成に取り掛かります。