2013年3月20日水曜日

◆Foreach ループと ブレークポイント

Foreach Loop コンテナーによる複数ファイルの読み取り

Foreach Loop コンテナーを利用すると、同じフォルダー内の複数のファイルのデータをまとめて読み取って、転送させることができるようになります。この Step では、前の Step で作成した「SSISoyo2」プロジェクトへ Foreach Loop コンテナーを追加して、サンプル スクリプトにある「import」フォルダー内のテキスト ファイルをすべて取り込む手順を説明します。

転送するデータ

image

転送後のデータ

image

作成するパッケージ

image

Foreach Loop コンテナーの配置
  1. Foreach ループ コンテナーを利用するには、次のように[制御フロー]タブで、SSIS ツールボックスの[コンテナー]カテゴリの中から[Foreach ループ コンテナー]をドラッグ&ドロップして配置します。
    image
  2. 次に、[データ フロー タスク]を[Foreach ループ コンテナー]の枠の中へドラッグ&ドロップして移動します。
    image
  3. 次に、Foreach ループ コンテナーの対象(繰り返し読み取るデータ)を設定するために[Foreach ループ コンテナー]をダブル クリックして、[Foreach ループ エディター]ダイアログを開きます。
    image
  4. このダイアログでは、[コレクション]ページをクリックします。
    今回はサンプル スクリプトの中にある「import」フォルダーのテキスト ファイルを対象とするので、次のように[Enumerator](列挙子)で「Foreach File 列挙子」を選択し、[フォルダー]で[参照]ボタンをクリックます。
    image
    [フォルダーの参照]ダイアログが表示されたら、サンプル スクリプト内にある「import」フォルダーを選択して、[OK]ボタンをクリックします。
  5. [Foreach ループ エディター]へ戻ったら、次のように[ファイル]へ「*.txt」と入力します。
    image
    これで、import フォルダー内の拡張子が「.txt」のファイルをすべて読み取れるようになります。
  6. 次に、読み取ったファイルの名前(パス)を変数へ割り当てるために、次のように[変数のマッピング]ページをクリックして開き、[変数]で「新しい変数」を選択します。
    image
    これにより、[変数の追加]ダイアログが表示されるので、[名前]へ任意の変数名(varFileName など)を入力して、[OK]ボタンをクリックします。
  7. [Foreach ループ エディター]へ戻ったら、[OK]ボタンをクリックして閉じます。
  8. 次に、設定した変数(Foreach ループ タスクで読み取ったファイルのパス)を転送元のファイルとして指定するために、次のように画面下部の[接続マネージャー]タブで「テキストファイルへの接続」をクリックします。
    image
    この「テキストファイルへ接続」は、「フラット ファイル ソース」で利用していた「MISS.txt」ファイルへの接続に利用していたものです。
    続いて、[プロパティ]ウィンドウで、[Expressions]を選択して、「...」ボタンをクリックします。
  9. これにより、[プロパティ式エディター]ダイアログが表示されるので、次のように[プロパティ]で「ConnectionString」を選択して、「...」ボタンをクリックします。
    image
    [式ビルダー]ダイアログが表示されたら、[変数]フォルダーを展開して表示される変数の一覧の中から「User::varFileName」を[式]へドラッグ&ドロップして、[OK]ボタンをクリックします。
  10. [プロパティ式エディター]へ戻ったら、[OK]ボタンをクリックして閉じます。
    これにより、フラット ファイル ソースの接続先(ConnectionString)を変数(Foreach ループ タスクで読み取ったファイルのパス)へ割り当てることができます。
  11. データの転送の結果を確認しやすくするために、まずは、次のように Management Studio のクエリ エディターから「ssisdb3」データベースの「ABC」テーブルに対して、TRUNCATE TABLE ステートメントを実行して、全行を削除しておきます。
    image
  12. SSIS デザイナーへ戻り、パッケージをデバッグ実行します。
    image
    すべてのタスクに緑のチェックマークが付いて、データの転送が成功していることを確認できます。
  13. 確認後、デバッグを終了します。
  14. 転送されたデータを確認するために、Management Studio から、[ABC]テーブルを右クリックして、[上位 1000 行の選択]をクリックします。
    image
    4 つのファイルのデータがすべて追加されていることを確認できます。このように、Foreach ループ コンテナーを利用すると、複数のファイルをまとめて転送することができるので、大変便利です。
  15. 最後に、[ファイル]メニューの[すべてを保存]をクリックして、SSISoyo2 プロジェクトを保存しておきます。
ブレークポイントを利用したステップ実行
ブレークポイントを利用したステップ実行

SSIS デザイナーでは、ブレークポイントを設定して、タスクを 1 つ 1 つステップ実行することも可能です。これを利用すると、Foreach ループ コンテナーが読み取ったファイル名(変数)などを確認することができるので、大変便利です。
それでは、これを試してみましょう。

  1. ブレークポイントを設定するには、次のように[データ フロー タスク]を選択し、[デバッグ]メニューの[ブレークポイントの設定/解除]をクリックします。
    image
    これにより、[データ フロー タスク]へ "赤丸" のアイコンが追加されます。
  2. ブレークポイントの効果を確認するために、パッケージをデバッグ実行します。
    すると、次のように[Foreach ループ コンテナー]が処理中に変わって、データ転送が一時的に中断されます。
    image
    同時にブレークポイントの赤丸アイコンに黄色の矢印が追加されて、ここで停止していることが分かります。変数の値を確認するには、この状態で、画面左下の[ローカル]タブをクリックして、[ローカル]ウィンドウを開き、[Variables](変数)を展開します。[ローカル]タブが表示されない場合は、[デバッグ]メニューの[ウィンドウ]から[ローカル]をクリックします。
    続いて、[Variables]に表示される一覧の中から、[User::varFileName]を展開して[Value]の値を確認します。
    image
    すると、「C:\\SampleScript\\import\\ABC.txt」のように表示され、サンプル スクリプトの import フォルダーから「ABC.txt」ファイルを読み取っていること(現在の「User::varFileName」変数の値)が分かります。
  3. 次に、データの転送を続行するために[デバッグ]メニューの[続行]をクリックします。
    image
  4. すると、[データ フロー タスク]には緑のチェックマークが付きますが、再びブレークポイントで、動作が一時的に中断します。
    image
    [ローカル]ウィンドウの[User::varFileName]の[Value]値を確認すると、今度は、「C:\\SampleScript\\import\\DEF.txt」のように表示されて、2つ目のファイルが読み取られていることを確認できます。
  5. 引き続き、データの転送を続行するために[デバッグ]メニューの[続行]をクリックします。
    image
    今度は、3つ目のファイル「GHI.txt」を読み取っているところで止まります。
    image
  6. もう一度、データの転送を続行するために[デバッグ]メニューの[続行]をクリックします。
    今度は、4つ目のファイル「MISS.txt」を読み取っているところで止まります。
    image
  7. さらに、[デバッグ]メニューの[続行]をクリックします。
    image
    すべてのタスクに緑のチェックマークが付くと、データ転送がすべて完了です。
  8. すべての動作を確認後、デバッグを終了します。
    以上のように、ブレークポイントを利用すると、タスクを 1つ 1つステップ実行できるようになって、また変数の値も確認できるので、大変便利です。
ブレークポイントの削除
  1. 設定したブレークポイントを削除したい場合は、次のように[デバッグ]メニューの[すべてのブレークポイントの削除]をクリックします。
    image
  2. 最後に、[ファイル]メニューの[すべてを保存]をクリックして、SSISoyo2 プロジェクトを保存しておきます。このプロジェクトは、次の Step でも引き続き使用します。

0 件のコメント:

コメントを投稿