第 3 章 「DTS デザイナ (1)」 ~ DTS 編 ~

NEC

Eラーニング事業部

鈴木 智行

2002 年 12 月 16 日

目次

1. 簡単な DTS パッケージの作成 1. 簡単な DTS パッケージの作成
2. DTS データ変換 2. DTS データ変換
   2-1 列変換マッピング2-1 列変換マッピング
   2-2 列変換2-2 列変換
3.ワークフローの定義3.ワークフローの定義
   3.ワークフローの定義3-1 優先順位制約
   3.ワークフローの定義3-2 並列実行

1. 簡単な DTS パッケージの作成

第 2 章でご紹介したとおり、DTS デザイナは DTS インポート/エクスポートウィザードでは作成できない n:n のデータ変換/転送や、複雑なワークフローを含む高度なデータ変換ソリューションで使用します。DTS インポート/エクスポートウィザードのように 1 つ 1 つの質問に応答していく形式ではなく、その名のとおりウィンドウ(デザインシート)に DTS 接続、DTS タスク、DTS 優先順位制約を配置(デザイニング)してDTSパッケージを完成させていきます。もちろん DTS インポート/エクスポートウィザードで作成できる簡単な DTS パッケージも作成可能ですし、既存の DTS パッケージを編集することもできます。

例えば第 2 章で作成した Access のファイル (C:\casts.mdb) から SQL Server のデータベース (movie) 中のテーブル (casts) にデータ転送する DTS パッケージを DTS デザイナで作成すると以下の手順になります。

(手順 1) DTS デザイナの起動

SQL Server Enterprise Manager で [コンピュータ] - [データ変換サービス] を右クリックしたメニューから [新規パッケージ] を選択します(画面 1-1)。

画面

画面 1-1 DTS デザイナの起動

(手順 2) DTS 接続の定義

変換元 (Microsoft Access) と変換先 (Microsoft OLE DB Provider for SQL Server) を [接続] ツールバー (デザインシートの左側) からデザインシートにドラッグします (この他に接続メニューから選択することも可能です)。 この時、接続名やファイル名 (Microsoft Access の場合)、サーバーやデータベースの指定 (Microsoft OLE DB Provider for SQL Server の場合) を行ないます (画面 1-2)。

画面

画面 1-2 DTS 接続の定義

(手順 3) DTS タスクの定義

[タスク] ツールバーからデータ変換タスクをデザインシートにドラッグします (この他にタスクメニューから選択することも可能です)。データ変換タスクは変換元の DTS 接続と変換先の DTS 接続を選択しなければ配置できません (画面 1-3)。

画面

画面 1-3 変換元の DTS 接続と変換先の DTS 接続を選択が必要

配置した後はタスクの内容を定義します。データ変換タスクの場合は変換の矢印を右クリックしたメニューの [プロパティ] から定義します (画面 1-4)。

画面

画面 1-4 タスクの内容の定義

今回のようなテーブルの単純なデータ転送であれば変換元タブと変換先タブで対象のテーブルを選択 (変換元では説明も入力) するだけで OK です。
実際には画面 1-5 のような DTS デザイナエラーが出力されますが、今回は既定の変換を利用するので気にする必要はありません。

画面

画面 1-5 DTS デザイナエラーが出力

以上で今回の DTS パッケージは完成です。[パッケージ] - [名前をつけて保存] でパッケージ名やパスワードを必要に応じて指定し、4 つの保存先のいずれかに保存します。

保存先については第 1 章の 「5. DTS パッケージと保存先」 で紹介しているので復習しておいてください。

2. DTS データ変換

DTS データ変換タスクのメインは、やはり列変換です。DTS デザイナでは変換をマップして、変換元列と変換先列の間の関係を作成します。

列変換マッピング

列変換マッピングには以下の種類があります。

  • 一対一列マッピング

    既定で DTS デザイナは、変換元列と変換先列を 1 つずつ列名に基づいて、列コピー変換で各変換元列および変換先列を対応付けます。例えば上記で作成した DTS パッケージのデータ変換タスクの [プロパティ] の変換タブ (画面 2-1-1) では一対一列マッピングが自動的に設定されています。

    dts3-2-1-1.gif

    画面 2-1-1 列コピー変換で対応づけられた一対一列マッピング

  • N 対 N 列マッピング
    変換元列と変換先列数が同じで、変換方法が同じであれば N 対N列マッピングを使用することができます。例えば画面 2-1-1 の一対一列マッピングはこの条件を満たすので、1つずつ変換を行う必要はなく、まとめて列コピー変換することが可能です(画面2-1-2)。

    dts3-2-1-2.gif

    画面 2-1-2 列コピー変換で対応づけられた N N 列マッピング

    単一の N 対 N 列コピー変換は、多数の一対一列コピー変換よりも処理が速くなります。特に変換の数が 20 を超えるとパフォーマンスの低下が顕著になりますので、できるだけ一対一列マッピングではなく、N 対 N 列マッピングを使用するように心がけてください。

    この他としては変換元列と変換先列の数が同じではないマッピングがあります。

2-2 列変換

画面 2-1-1で示したとおり列変換の既定の種類は列コピー変換ですが、既存の変換を「削除」ボタンを押下して削除し、変換元列と変換先列を (必要であれば複数) 選択し「新規」ボタンを押下すれば、画面 2-2-1で示されるような列変換が選択可能になります。

画面

画面 2-2-1 列変換の種類

各列変換の説明は表 2-2-2 のとおりです。

列変換の種類

説明

ActiveX Script

(ActiveX スクリプト変換)

1つ以上の変換元列および変換先列の間で変換を行うコード (ActiveX スクリプト) を記述します

Copy Column

(列コピー変換)

1 つ以上の変換元列から変換先列に列データを直接コピーします

DateTime String

(日付時刻文字列変換)

変換元列の日付または時刻を変換先列で別の形式に変換します

Lowercase String

(文字列の小文字変換)

変換元列を小文字に変換し、必要に応じて変換先のデータ型に変換します

Middle of String

(文字列の一部変換)

変換元列から部分文字列を抽出し、変換し、変換先列に結果をコピーします

Read File

(ファイル読み取り変換)

ファイルの内容を検索して開き、その内容を変換先列にコピーします。

Trim String

(文字列のトリミング変換)

変換元列の文字列の先頭、末尾、または文字列間にあるスペースを削除し、変換先列に結果をコピーします

Uppercase String

(文字列の大文字変換)

変換元列を大文字に変換し、必要に応じて変換先のデータ型に変換します

Write File

(ファイル書き込み変換)

変換元列(データ列)の内容を別の変換元列(ファイル名列)で指定されたパスを持つファイルにコピーします

2-2-2 列変換の説明

各列変換の詳細な設定はさまざまです。例えば ActiveX スクリプト変換は画面 2-2-1で 「OK」 ボタンを押下し、次の画面で 「プロパティ」 ボタンを押下すれば、VBSctipt や Jscript でコード記述が可能です (画面 2-2-3)。

画面

画面 2-2-3 ActiveX スクリプト変換の設定画面

また、列コピー変換の場合は特にデータ型変換の許可を厳密に行うことができます。既定では暗黙の変換を許可しますが、変換元列と変換先列のデータ型、サイズ、NULL 許可などが異なる場合の規則を簡単に指定することができます。画面 2-1-1 の変換 (→) を右クリックしたメニューから[フラグ]を選択し、必要な規則を選択します (画面 2-2-4)。

画面

画面 2-2-4 変換フラグの設定

3.ワークフローの定義

複数の DTS タスクを 1 つの DTS パッケージに登録する場合には、ワークフローの定義が可能です。

3-1 優先順位制約

優先順位制約は DTS パッケージ内のタスクの順番定義が可能です。DTS では表 3-1-1 に示されるような 3 種類の優先順位制約を使用することができます。

優先順位制約の種類

説明

完了時(無条件)

タスク 1 の結果に関係なく、タスク 1 が完了した後にタスク 2 を実行します(青の矢印)

成功時

タスク 1 が正常に終了した後にタスク 2 を実行します (緑の矢印)

失敗時

タスク 1 が正常に終了しなかった時にタスク 2 を実行します (赤の矢印)

3-1-1 3 種類の優先順位制約

例えば 「1. DTS デザイナを使った簡単な DTS パッケージの作成」 で作成した DTS パッケージは変換先にデータを追加する形になっているため、DTS パッケージを再実行すると目的に合わなくなってしまう場合もあります。DTS パッケージを再実行した時に変換先テーブルを削除/作成するロジックを組み入れ、変換先データをクリアすればこういった問題は解決します。その手順は以下のとおりです。

(手順 1) DTS デザイナの起動

SQL Server に保存した DTS パッケージであれば、SQL Server Enterprise Manager で [コンピュータ] - [データ変換サービス] - [ローカルパッケージ] から目的のパッケージを右クリックしたメニューで [パッケージのデザイン] を選択します(画面 3-1-2)。

画面

画面 3-1-2 DTS パッケージの編集

(手順2) DTS タスクの追加

[タスク] ツールバーから SQL 実行タスクを 2 つ追加します。タスクの説明をそれぞれ入力し、既存の接続で変換先 (変換元ではありません) の DTS 接続を選択します。また SQL ステートメントで 1 つのタスクはテーブルを削除する Transact-SQL 文を、もう 1 つはテーブルを作成する Transact-SQL 文を入力します (画面 3-1-3)。

画面

画面 3-1-3 SQL 実行 ( テーブル削除 ) タスクの追加

(手順 3) 優先順位制約の定義

テーブルを削除するタスクをクリックし、Ctrl キーを押しながらテーブルを作成するタスクをクリックします (この順番は大切です)。その後ワークフローメニューから完了時を選択すると、無条件優先順位制約の指定が完了します。同様にしてテーブルを作成するタスクからデータ変換タスクに対して成功時優先順位制約を指定します。このときデータ変換タスク (矢印) を選択しても優先順位制約は設定できません。データ変換タスクに対してではなく、DTS 接続に対しての指定になります。このようにデータ変換タスクは他のタスクとは異なり特殊な扱いになりますので注意してください。

以上で優先順位制約を含めた DTS パッケージが完了します (画面 3-1-4)。

画面

画面 3-1-4 優先順位制約を含んだ DTS パッケージ

テーブルを削除するタスクからテーブルを作成するタスクに対して無条件優先順位制約を指定した理由は、DTS パッケージの 1 回目の実行を考慮したためです。変換先にテーブルがなかった場合、1 回目はテーブルを削除するタスクが失敗しますが2回目以降は成功するため、どちらにも対応できるようにする必要があります。(画面 3-1-5) (画面3-1-6)

画面

画面 3-1-5 DTS パッケージの 1 回目の実行

画面

画面 3-1-6 DTS パッケージの 2 回目の実行

タスクには複数の優先順位制約を設定することができます。例えば画面 3-1-7 のような DTS パッケージがあった場合にはタスク C はタスク A とタスク B がどちらも成功しないと実行されません (画面 3-1-8)。DTS では論理的な AND 関係を想定して複数の優先順位制約を処理するので注意してください。

画面

画面 3-1-7 複数の優先順位制約

画面

画面 3-1-8 一方が失敗すると後続のタスクは実行されない

3-2 並列実行

DTS タスク間に優先順位制約がなければ、各 DTS タスクは別のスレッドとして並列に実行されます (画面 3-2-1)。

画面

画面 3-2-1 並列実行される DTS タスク

既定では DTS のタスクは同じタスク優先度 (Normal) で実行されますが、タスクを右クリックして [ワークフロー] - [ワークフローのプロパティ] (データ変換タスクの場合のみ [ワークフローのプロパティ]) のオプションタブでタスク優先度 (Low,Below Normal,Normal,Above Normal,High) の変更ができます (画面 3-2-2)。これによってどのタスクを最優先で実行するかを決定します。

画面

画面 3-2-2 タスク優先度の変更

今回は DTS デザイナでの基本的な設定を紹介しました。次回はもう一歩踏み込んだ設定を紹介します。

dts.jpg

鈴木 智行 : NEC Eラーニング事業部に所属。 入社以来、インストラクタとして教育業務に従事。汎用機、UNIX を経て、1994 年より マイクロソフト認定トレーナー (MCT) として、管理者向け教育を担当。SQL Server は 4.21a から携わっており、現在は主に SQL Server 2000 に関わるデータベース教育を中心に担当。Windows 2000 および SQL Server 2000 での MCSA, MCSE, MCDBA を取得しており、情報処理技術者試験のテクニカルエンジニア (データベース) も取得済。最近は MCA の 3 科目 (データベース、OS/ネットワーク、アプリケーション構築) 全てに合格し、C# を勉強中。