以下に、簡単なStreamオペレータ タスク、エラー テーブルのリスト、およびエラー原因を特定するための手順を示します。 このタスク例では、2つのDML文(INSERT文とUPDATE文)から成るDMLグループを1つだけ使用して、Streamオペレータ ジョブを説明します。
下記の例の手順では、エラー テーブルのエラー情報すべてを使用します。 通常は、エラー テーブルの1つまたは2つの列を評価すれば、エラーの原因が分かります。 この例では、次のAPPLY文を使用してエラー テーブルを作成します。
APPLY 'INSERT INTO table1 VALUES (:FIELD1,:FIELD2 ); UPDATE table2 SET field3 = :FIELD3 WHERE field4 = :FIELD4;'
タスク例
以下のタスク例では、「シーケンス タイプ」と「番号」の各列に各文のタイプおよび番号を示します。 「文」列には、実際のStreamオペレータ ジョブ文を示します。
シーケンス | 文 | |
---|---|---|
タイプ | 番号 | |
DML | 001 | 'INSERT INTO table1 VALUES (:FIELD1,:FIELD2 ); UPDATE table2 SET field3 = :FIELD3 WHERE field4 = :FIELD4;' |
STMT | 001 | INSERT INTO table1 VALUES (:FIELD1, :FIELD2 ); |
STMT | 002 | UPDATE table2 SET field3 = :FIELD3 WHERE field4 = :FIELD4; |
以下のテーブルは、上記のタスクによって生成された第1エラー テーブルのエラーです。
DataSeq | DMLSeq | SMTSeq | SourceSeq | ErrorCode | ErrorField |
---|---|---|---|---|---|
002 | 001 | 002 | 20456 | 2679 | 000 |
以下の手順を使用して、エラー情報を評価し、問題を識別します。
- DMLSeqフィールドをチェックし、DMLグループを特定します。 このフィールドは、順序番号が001になっています。
- STMTSeqフィールドをチェックします。 シーケンス番号は002です。つまり、2番目のDML文を実行したときにエラーが発生したことが分かります。具体的には、タスクのUPDATE文でエラーが発生しています。
- Streamオペレータ ジョブ スクリプトが最初のDMLグループ(DMLSeqが001のため)で2つのDML文を使用していることを確認します。
- DataSeqフィールドをチェックします。 フィールド値002により、2番目の入力データ ソースで行を処理したときにエラーが発生したことが分かります。 (入力データ ソース シーケンスは、Teradata PTによって決まります。)
- ErrorCodeフィールドの意味を確認します。 エラー2679"The format or data contains a bad character(形式またはデータに無効な文字が含まれています)"は、クライアント システムのデータに問題があることを示しています。
- スクリプトを調べると、UPDATE文はtable2をロードしており、次のことが分かります。
- 発生したエラーの種類
- エラーを検出した文
- エラーを発生した入力データ ソース
- SourceSeqフィールドをチェックします。 フィールド値20456は、入力データ ソースの20,456番目のレコードに問題があることを示しています。
- 問題を修正します。