NEXTSCAPE blog

株式会社ネクストスケープの社員による会社公式ブログです。ネスケラボでは、社員が日頃どのようなことに興味をもっているのか、仕事を通してどのような面白いことに取り組んでいるのかなど、会社や技術に関する情報をマイペースに紹介しています。

MENU

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実行タスクです。

f:id:nextscape_blog:20210908164942p:plain

ストアドはこちら。

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

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

 

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

ついにレポート用のテーブルにデータをロードする処理がやってまいりました。
処理はもちろんSQL実行タスクで。

f:id:nextscape_blog:20210908165035p:plain

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のプロジェクトでも使用できます。

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

f:id:nextscape_blog:20210908165110p:plain

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

f:id:nextscape_blog:20210908165129p:plain

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

f:id:nextscape_blog:20210908165236p:plain

f:id:nextscape_blog:20210908165316p:plain

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

– 動作確認 –

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

f:id:nextscape_blog:20210908165351p:plain

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

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

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

f:id:nextscape_blog:20210908165429p:plain

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

f:id:nextscape_blog:20210908165500p:plain

 

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

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

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