
エラー状況を管理する最初の解決策は、エラー状況を回避することです。一部のエラー状況は、ジョブを構築することで簡単に並列的に実行できるため、頻繁に失敗する問題が考慮されます。
しかし、サーバー障害などやむを得ない状況もある。その後、失敗した状況から回復するようにデータフローを設計する必要があります。
エラーの回避
データフローのエラーは、以下の方法で回避できます。
- コンテキストが正しい場合にのみデータフローが実行されるように、条件を使用します。
- ループを使用して、コンテキストが正しくなるまで最初からやり直します。
万が一の状況に届かない場合は、忘れずに外出方法を追加してください。
1 つの例として、ジョブを実行するために外部ファイルが必要である場合が挙げられます。この場合、wait_for_file 関数または while ループと file_exists 関数を使用して、ジョブを実行する前に指定された場所にファイルが存在することを確認します。
While ループは、ワークフローで使用される単一使用のオブジェクトです。While ループは、条件が true である限り、一連のステップを繰り返します。
通常、While ループ中に実行されるステップによって条件が変更され、最終的に条件が満たされなくなり、ワークフローが While ループから終了します。条件が変更されない場合、While ループは終了しません。
たとえば、ワークフローが特定のファイルが書き込まれるまで待機することができます。while ループを使用して、file_exists 関数を使用してファイルの存在を確認します。ファイルが存在しない限り、ワークフローは特定の期間、スリープモードに移行してから再チェックすることができます。
ファイルが書き込まれない可能性があるため、カウンタなどの別のチェックをループに追加して、while ループが最終的に終了するようにします。つまり、While ループを変更して、ファイルの有無とカウンタの値をチェックします。ファイルが存在せず、カウンタが特定の値より小さい場合は、While ループを繰り返します。ループの各反復で、ワークフローをスリープモードにして、カウンタを増やします。
データリカバリ方針のレベル
一部のエラーは予測できないため、ジョブが失敗します。
失敗したジョブを再実行すると、最初のジョブ実行中に正常にロードされた行が重複する可能性があります。
その後、データベースが正しい状態になり、スケジュールを続行できるように、ジョブをリカバリする方法を見つける必要があります。
- データベース全体のリカバリ
標準の RDBMS サービスを使用して、クラッシュしたデータキャッシュをデータベース全体にリストアします。このオプションは、このコースの範囲外です。
- 以下のトランザクションを使用します。
テーブルに整合性のある状態が保持されるように、トランザクションで収集されるデータフローを設定します。
- 部分的にロードされたテーブルからのリカバリ:
行の重複ロードを回避します。
- 見つからない値または行を修復します。
欠損値を特定し、挿入できなかったローを管理します。
- 例外の管理:
すべての例外がワークフローで管理されていることを確認します。
アプリケーション内のデータフロー間の関係に応じて、これらの手法を組み合わせてエラーから回復することができます。
トランザクションの設定
データフローで大量のデータをロードする必要がある場合、またはデータフローによって依存テーブル (受注テーブルや受注明細テーブルなど) をロードする必要がある場合、他の一部がロードされていない行はロードしません。
パフォーマンスとリソースの使用を改善するために、SAP Data Services ではデフォルトで複数のトランザクションのテーブルがロードされます。"コミットする行数" オプションを設定して、各トランザクションで処理される行数を決定することができます。
ただし、データフローが失敗した場合は、ジョブの停止時に一部の行がすでにテーブルでコミットされている可能性があります。
この状況を回避するには、データフロー全体を 1 つのトランザクションに含めるように Data Services に依頼します。

一部ロードされたデータ
重複するローが挿入されないようにするには、いくつかの方法を使用できます。
- 重複の挿入を回避するには、以下のいずれかのオプションを使用します。
- テーブルの行数が増加し、ファクトテーブルなどのフィールドが少ない場合にのみ、不足している行を挿入するために、データフローに Table Comparison トランスフォームを含めます。
- ターゲットテーブルで [ロード前にテーブルからデータを削除する] または [テーブルをドロップおよび再作成する] オプションを選択して、各実行時にデータを置き換えます。この手法は、ターゲットテーブルの変更がテーブルのサイズと比較して多数ある場合に最適です。
- テーブルの行数が減り、ディメンションテーブルなどのフィールドの数が多い場合に、ロードの自動修正機能を使用するように、ターゲットテーブルのオプションを変更します。
- SQL コマンドを含めて、テーブルがロードされる前に以前の部分的な更新を削除します。
自動訂正ロードでは、テーブルに新しい行を追加する前に、ターゲットテーブルで既存の行がチェックされます。ただし、auto-correct ロードオプションを使用すると、ジョブの速度が低下する可能性があります。ターゲットテーブルが大きく、テーブルに対する変更が比較的少ない場合は、この手法を考慮してください。
ロード前の SQL コマンドを使用すると、ジョブ内のステップが不完全なときに発生する部分的なデータベース更新を削除できます。通常、プリロード SQL コマンドは、部分的な挿入ステップの開始前に設定された変数に基づいてローを削除します。
注記
見つからない値または行
- Validation または Query トランスフォームでの欠落値の処理
- [オーバーフローファイルを使用する] オプションで欠落行を処理します。
欠落している行は、ターゲットテーブルに挿入できない行です。たとえば、プライマリキー制約に違反した場合、ローが欠落することがあります。オーバーフローファイルは、このようなデータの問題を処理するのに役立ちます。
オーバーフローファイルを指定し、Data Services で行をテーブルにロードできない場合、Data Services はその行を代わりにオーバーフローファイルに書き込みます。トレースログには、ロードが失敗したデータフローとファイルの場所が示されます。オーバーフロー情報を使用して、ソース内の無効なデータ、またはデータ移動で発生した問題を特定します。新しい実行を行うたびに、既存のオーバーフローファイルが上書きされます。
オーバーフローファイルを使用する場合は、ファイル名とファイル形式を入力する必要があります。
ファイル形式には、以下の 2 つのオプションがあります。
- データの書き込みを選択すると、Data Services を使用して、オーバーフローファイルからデータを読み取り、クレンジングしてターゲットテーブルにロードすることができます。
- SQL の書き込みを選択すると、ターゲットにアクセスするときに SQL コマンドを使用してターゲットを手動でロードできます。
注意