【CDI】Informatica Cloud Data Integrationでエラー発生時のリトライ機能を実装してみた
こんにちは、データアナリティクス事業本部ビジネスソリューション部の渡部です。
今回はInformatica Cloud Data Integration(以降、CDI)で、エラー発生時のリトライ機能を実装してみました。
やりたいこと
ETL処理時にDBへの接続エラーなどで偶発的エラーが発生した場合に、自動的に処理をリトライをさせることで、人の手での障害対応件数を減らしたいです。
やってみた
タスクフローの完成図は以下のとおりです。
上記のタスクフローでは、データタスクでエラーが発生した場合に最大3回のリトライがされて、それ以上エラーが発生した場合は異常終了とさせる処理になっております。
各ステップでの設定について以下に記載していきます。
開始
一時フィールドを追加します。
- 名前:err_count
- タイプ:整数
- 説明:エラー回数をカウントする変数
- 初期値:0
割り当て
一時フィールドで追加したerr_countを1ずつカウントアップさせます。
エラー1回につき、err_countが1ずつ増えていきます。
- 次を使用するように割り当て済み:計算式
- 開始:$temp.err_count + 1
ディシジョン
err_countの値をみて、処理を分岐させます。
- フィールド:err_count
- 条件:次より小さいか等しい
- 値:3
今回はリトライを3回するため、値を3にしています。
ジャンプ
エラーが発生したデータタスク(dt_mt_retry)にジャンプします。
- 宛先:dt_mt_retry
実行してみた
エラーを意図的に発生させるため、ターゲットのテーブル名を変更してからタスクフローを実行しました。そしてリトライ中にテーブル名を元に戻しました。
結果、想定通りに最大である3回リトライされて、処理が正常終了していることが確認できました。
注意点
今回ご紹介したリトライ処理は、すべてのエラー発生時にリトライがなされます。
そのため、ETL処理でInsertなど積み上げでデータ登録をしている場合は、リトライ処理によって二重登録の危険があります。
リトライ処理を入れる場合は、この点の確認が必須となりますので、ご注意ください。
まとめ
以上がCDIでのリトライ機能の実装でした。
運用では人の手が入る障害対応は極力減らしたいので、偶発的エラーが発生する場合にはリトライ処理を入れるのが推奨です。
おまけ
今回ご紹介したのはエラー発生後、即リトライさせる方法でしたが、待機ステップを入れることで指定の時間、処理を止めてからリトライさせることも可能です。
例えば以下のように、2回目のリトライまでは即リトライ、3回目のリトライを10分の待機を入れてからリトライという処理が可能です。