Pipeline error log#
各パイプラインにはエラーログテーブルがあります。レコードが任意のステップで失敗すると、ログは、ソースレコードID、失敗したステップ、操作タイプ、およびエラーメッセージをキャプチャします。バッチの残りの部分は処理を継続します。
その仕組み#
レコードに失敗すると、ソースID、失敗したステップ番号、操作タイプ、エラーメッセージとともに
{source_schema}.pipeline_{pipeline_name}_errorsログに記録されます。単一の不良レコードはパイプラインをブロックしません。バッチ内の他のレコードは、残りのすべてのステップを続行します。
エラーログテーブルはパイプラインで作成され、パイプラインが削除されるときに削除されます。
エラーは4つの
error_category値のいずれかを取得します。
Category |
Scope |
Blocks pipeline? |
Description |
|---|---|---|---|
RecordTemporary |
Record |
No |
単一レコードの一時的な障害。再試行で成功する場合があります。 |
RecordPermanent |
Record |
No |
単一のレコードの永続的な障害たとえば、破損したデータ。 |
PipelineTemporary |
Pipeline |
Yes |
ステップ全体を停止した一時的な障害たとえば、サービスの停止。再試行で解決される場合があります。 |
PipelinePermanent |
Pipeline |
Yes |
ステップ全体を停止した永続的な障害たとえば、無効なモデル構成。 |
RecordTemporary およびRecordPermanent
エラーはパイプラインをブロックしません。他のレコードは処理を継続します。
PipelineTemporary およびPipelinePermanent
エラーは、ステップ全体をブロックします。一時的なエラーは、再試行すると解決される場合があります。永続的なエラーは、不正なデータまたは構成ミスを示しています。
エラーのクエリー#
aidb.get_error_logs()
を使用して、パイプラインのエラーログを検査します。
SELECT * FROM aidb.get_error_logs(my_pipeline);
__OUTPUT__
id | source_id | part_ids | pipeline_step | step_operation | error_message | error_category | failed_at | retry_count | last_retry_at
- ---+-----------+----------+---------------+----------------+----------------------------------------+-------------------+----------------------------+-------------+---------------
3 | doc_99 | {0,2} | 2 | ChunkText | text segment exceeded maximum length | RecordPermanent | 2026-04-10 14:32:01.123+00 | 0 |
2 | doc_42 | {0} | 1 | ParsePdf | failed to extract text from page 0 | RecordPermanent | 2026-04-10 14:31:58.456+00 | 0 |
1 | doc_7 | | 1 | ParsePdf | corrupt PDF header | RecordPermanent | 2026-04-10 14:31:55.789+00 | 0 |
(3 rows)
ソースレコード、ステップ番号、またはエラーカテゴリでフィルタリングします。
SELECT * FROM aidb.get_error_logs(
my_pipeline,
p_source_id => doc_42
);
SELECT * FROM aidb.get_error_logs(
my_pipeline,
p_pipeline_step => 1::smallint,
p_error_category => RecordPermanent
);
p_limit およびp_offset を使用したページ付け
SELECT * FROM aidb.get_error_logs(my_pipeline, p_limit => 20, p_offset => 40);
完全なパラメーターと戻り型の詳細については、 Operations reference を参照してください。
エラーの概要#
1つのパイプラインのステップ、オペレーション、およびカテゴリ別にグループ化されたエラー数を取得します。
SELECT * FROM aidb.get_error_log_summary(my_pipeline);
__OUTPUT__
pipeline_step | step_operation | error_category | error_count | latest_failed_at
- --------------+----------------+-------------------+-------------+----------------------------
1 | ParsePdf | RecordPermanent | 2 | 2026-04-10 14:31:58.456+00
2 | ChunkText | RecordPermanent | 1 | 2026-04-10 14:32:01.123+00
(2 rows)
または、すべてのパイプラインで同じロールアップを一度に取得します。
SELECT * FROM aidb.get_all_error_summaries();
__OUTPUT__
pipeline_name | pipeline_step | step_operation | error_category | error_count | latest_failed_at
- --------------+---------------+----------------+-------------------+-------------+----------------------------
my_pipeline | 1 | ParsePdf | RecordPermanent | 2 | 2026-04-10 14:31:58.456+00
my_pipeline | 2 | ChunkText | RecordPermanent | 1 | 2026-04-10 14:32:01.123+00
pdf_ingester | 1 | ParsePdf | PipelinePermanent | 1 | 2026-04-10 15:00:12.000+00
(3 rows)
エラーのクリア#
IDで特定のエラーログエントリを削除します。
SELECT aidb.clear_error_logs(my_pipeline, ARRAY[1, 3]);
__OUTPUT__
clear_error_logs
- -----------------
2
(1 row)
削除された行数を返します。クリアはIDベースです。エントリを削除する前にget_error_logs()
で確認してください。
失敗したレコードの再試行#
!!!注 aidb.retry_pipeline_errors()
はまだ利用できません。将来のリリースに含まれる予定です。
Known issues を参照してください。
aidb.retry_pipeline_errors()
は、利用可能な場合、失敗したステップから特定のエラーログエントリを再処理します。
SELECT * FROM aidb.retry_pipeline_errors(my_pipeline, ARRAY[1, 2]);
__OUTPUT__
error_id | status | error_message
- ---------+----------+--------------------------------------------
1 | resolved |
2 | failed | failed to extract text from page 0
(2 rows)
解決されたエントリはエラーログから削除されます。失敗した再試行は、インクリメントされたretry_count
および更新されたlast_retry_at
タイムスタンプとともにログに残ります。
パイプラインステータスの統合#
エラー数は promoteb.pipeline_metrics ビューにも表示されます。パイプラインステータスはエラーの重大度を反映します。
PartialErrors— 一部のレコードは失敗しました。残りは通常に処理されました。BlockingErrors—パイプラインレベルのエラーにより、ステップが完全に停止しました。
パイプラインの状態のモニタリングの詳細については、 モニタリングとオブザーバビリティ を参照してください。