レッスン 4-3: エラー フロー リダイレクションを追加する
適用対象: SQL Server Azure Data Factory の SSIS Integration Runtime
前のタスクでは、壊れているサンプル フラット ファイルを Lookup Currency Key 変換で処理しようとするとエラーが発生し、変換を行うことができません。 この変換ではエラー出力に既定の設定を使用するため、エラーが発生すると変換は失敗します。 変換が失敗すると、それ以降のパッケージも失敗します。
エラー出力を使用し、失敗した行を別の処理パスにリダイレクトするようにコンポーネントを構成することで、変換の失敗を回避できます。 個別のエラー処理パスを使用する場合は、より多くのオプションを利用できます。 たとえば、データを消去した後に、失敗した行を再処理することができます。 または、失敗した行を詳細なエラー情報と共に保存し、後の検証や再処理に役立てることも可能です。
ここでは、失敗した行をエラー出力にリダイレクトするよう Lookup Currency Key 変換を構成します。 データ フローのエラー分岐では、これらの行が Integration Services によってファイルに書き込まれます。
既定では、Integration Services エラー出力内の 2 つの追加列 (ErrorCode と ErrorColumn) には、エラーの数値コードと、エラーが発生した列の ID しか含まれていません。 この実習では、パッケージによって失敗行がファイルに書き込まれる前に、スクリプト コンポーネントを使用して Integration Services API にアクセスし、エラーの説明を取得します。
エラー出力を構成する
[SSIS ツールボックス] で [共通] を展開し、 [スクリプト コンポーネント] を [データ フロー] タブのデザイン画面にドラッグします。 [スクリプト] を [Lookup Currency Key] 変換の右に配置します。
[スクリプト コンポーネントの種類を選択] ダイアログ ボックスで、[変換] を選択し、[OK] を選択します。
2 つのコンポーネントを接続するには、[Lookup Currency Key] 変換を選択して、赤色の矢印を、新しい [スクリプト] 変換までドラッグします。
赤い矢印は、 [Lookup Currency Key] 変換のエラー出力を表します。 エラー処理をスクリプト コンポーネントにリダイレクトするには、赤い矢印を使用して変換をスクリプト コンポーネントに接続します。スクリプト コンポーネントではエラーが処理され、変換先に送信されます。
[エラー出力の構成] ダイアログ ボックスの [エラー] 列で、[行のリダイレクト]を選択し、[OK] を選択します。
[データ フロー] デザイン画面で、新しい [ScriptComponent] にある名前 [Script Component] を選択し、その名前を「 Get Error Description」に変更します。
[Get Error Description] 変換をダブルクリックします。
[スクリプト変換エディター] ダイアログ ボックスの [入力列] ページで、 [ErrorCode] 列を選択します。
[入力および出力] ページで [出力 0] を展開し、[出力列] を選択してから、[列の追加] を選択します。
Name プロパティで「ErrorDescription」と入力し、DataType プロパティを [Unicode 文字列 [DT_WSTR]] に設定します。
[スクリプト] ページで、LocaleID プロパティが [英語 (米国)] に設定されていることを確認します。
[スクリプトの編集] を選択して、Microsoft Visual Studio Tools for Applications (VSTA) を開きます。 Input0_ProcessInputRow メソッドに、次のコードを入力するか貼り付けます。
[Visual Basic]
Row.ErrorDescription = Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode)
[Visual C#]
Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);
完成したサブルーチンのコードは次のようになります。
[Visual Basic]
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) Row.ErrorDescription = Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode) End Sub
[Visual C#]
public override void Input0_ProcessInputRow(Input0Buffer Row) { Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode); }
[ビルド] メニューの [ソリューションのビルド] を選択し、スクリプトをビルドして変更を保存し、VSTA を閉じます。
[OK] を選択して、[スクリプト変換エディター] ダイアログ ボックスを閉じます。