7 モデルケース6「データ転送時のエラーを処理する」

モデルケース5では、CSVファイルの「登録日」は「YYYYMMDD」という定型的なフォーマットになっていました。そのため、あらかじめそのルールに従って変換すれば済みました。

しかしCSVファイルはテキストファイルですので、データ型を無視してデータを入力したり編集したり出来てしまいます。そのため、データ型に厳密なデータベースに取り込もうとするとエラーが発生する場合があります。

たとえば、数値型フィールドにアルファベットなどの文字を取り込もうとした場合、テキスト型や数値型フィールドのフィールドサイズをオーバーするような文字数・大きな数値を取り込もうとした場合、日付/時刻型フィールドに実在しない日付(11月31日など)を取り込もうとした場合などです。

タスクやコンポーネントのフローでは、デフォルトの設定ではそのようなエラーが発生すると以降のレコード処理や以降のタスクが実行されず、その時点でパッケージ処理が中止されます。そこでここでは、そのような可能性のある(ある程度エラーを予期できる)処理について、エラー発生時にも処理を続行させるためのエラー処理について説明します。


■エラーを無視して続行させる方法

まず、エラーが発生した場合そのレコードは無視して、以降のレコードのみ転送を続行させる方法です。それには、次のような設定を行います。
  • ここではモデルケース5のパッケージを「Case06_1.dtsx」という名前でコピーして変更を加えるものとします。

  1. まずここでは、「登録日」に実在しない日付が保存されたCSVファイルを用意します。

  2. パッケージを実行します。
    すると、「データ変換」コンポーネントでエラーが発生して処理が中止されます。


  3. そこでデバッグを停止したあと、「データ変換」コンポーネントをダブルクリックして「データ変換 変換エディタ」ダイアログを開きます。


  4. ダイアログで[エラー出力の構成]ボタンをクリックします。それによって「エラー出力の構成」ダイアログが開きます。


  5. ここからエラー発生時の処理を設定します。
    まず、対象となる列の「エラー」の欄をすべて選択します。CtrlキーやShiftキーを押しながら欄をクリックすることで複数まとめて選択できます。


  6. 次に、画面下方の「選択したセルに設定する値」の欄で[▼]をクリックしてドロップダウンリストから「エラーを無視する」を選択したあと、その右の[適用]ボタンをクリックします。


  7. それによって画面上部の列の一覧の「エラー」欄がすべて「エラーを無視する」に変わっていることを確認します。
    • 複数列まとめてではなく、それぞれの列ごとにエラー処理方法を設定することもできます。それには該当列の「エラー」欄で[▼]をクリックして項目を選択します。

  8. 「エラー出力の構成」ダイアログで[OK]ボタンを、さらに「データ変換 変換エディタ」ダイアログで[OK]ボタンをクリックしてダイアログを閉じます。

  9. パッケージを実行します。
    今度はエラーが発生せず、最後までパッケージが実行されています。
    • この設定の場合、「登録日」で変換エラーが発生したレコードについては、「登録日」フィールドにはNull値が書き出されます。
    • 主キーなどの関係でレコードそのものが転送できない場合はレコード全体が無視されます。


■エラーレコードをファイル出力して続行させる方法

次に、エラーのないレコードだけを変換先テーブルに出力し、エラーが発生したレコードは別の所定のテキストファイルに出力した上でパッケージ全体の処理を続行させる方法です。それには、次のような設定を行います。
  • ここでは前述の「Case06_1.dtsx」を「Case06_2.dtsx」という名前でコピーして変更を加えるものとします。

  1. 「データ変換」コンポーネントをダブルクリックして「データ変換 変換エディタ」ダイアログを開きます。

  2. [エラー出力の構成]ボタンをクリックして「エラー出力の構成」ダイアログを開きます。

  3. すべての列の「エラー」の欄を選択して、その設定を「行のリダイレクト」に変更します。


  4. 「エラー出力の構成」ダイアログで[OK]ボタンを、さらに「データ変換 変換エディタ」ダイアログで[OK]ボタンをクリックしてダイアログを閉じます。

  5. ここから、エラーのあったレコードを所定のファイルに出力するための設定です。
    まずツールボックスから「フラットファイル変換先」コンポーネントをデザイン上にドラッグ&ドロップします。


  6. エラーが発生した場合のフローを設定するため、「データ変換」コンポーネントを選択し、その下に表示された「赤いコネクタ」を「フラットファイル変換先」へドラッグ&ドロップします。


  7. それによって「エラー出力の構成」ダイアログが表示されますが、そのまま[OK]ボタンをクリックします。


  8. 赤いコネクタが結合されたことを確認して、今度は「フラットファイル変換先」コンポーネントをダブルクリックします。

  9. 「フラットファイル変換先エディタ」ダイアログが開いたら、この時点ではまだエラー内容を出力するファイルへの接続が設定されていませんので、[新規作成]ボタンをクリックしてその作業を行います。
    • この画面で「ファイル内のデータを上書きする」にチェックを付けておくと、パッケージを実行するたびにファイルが初期化されます。チェックを付けない場合には、実行するたびにエラーデータが“追加”されます。

  10. まず「フラットファイル形式」ダイアログが表示されますので、ここではCSVファイルに出力するものとして「区切り記号」を選択して[OK]ボタンをクリックします。


  11. 「フラットファイル接続マネージャエディタ」ダイアログが表示されたら、接続マネージャの名前やエラーを出力するファイルのフルパス、見出し行の有無などを設定して[OK]ボタンをクリックします。
    • このダイアログで「詳細設定」の画面に切り替えると、列の一覧の中に「ErrorCode」と「ErrorColumn」という列が含まれています。このことから、エラーの出力先ファイルには自動的にエラーコードなども出力できることが分かります。

  12. 「フラットファイル変換先エディタ」に戻ったら「マッピング」の画面に切り替えて、転送元データのうちどのフィールドをエラー用のファイルに出力するかの関連付けを確認します。必要であれば対象フィールドの削除などもここで行います。


  13. 最後に[OK]ボタンをクリックします。


  14. パッケージを実行してみます。
    デザイナ上の実行結果を見てみると、CSVのテストデータの中には3件のエラーとなるはずのレコードが含まれていますので、全30件のうち27件が正しくOLE DB変換先に出力され、3件がエラー用のフラットファイルに出力されていることが分かります。

    このとき、エラー出力用のファイルは次のようになっています。
  • この方法では、「エラーを無視して続行させる方法」のようにエラーのあったレコードは「登録日」がNull値で書き出されることはなく、レコード全体が転送対象から除外されます(「転送元のレコード数−エラーレコード数」が出力されます)。
  • ここではエラーレコードの出力先をフラットファイル(CSVファイル)としましたが、他のコンポーネント(「OLE DB変換先」など)を使うことで、AccessやSQL Server等のテーブルに出力することでもできます。
| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved