イベント契約
クエリが期待するフィールド
| フィールド | 種類 | なぜ存在するのか |
|---|---|---|
| timestamp_utc | Timestamp | 請求書のイベント時間。 |
| invoice_id | Utf8 | 安定したプロバイダーの請求書識別子。 |
| event_name | Utf8 | invoice_payment_failed または invoice_paid。 |
| amount_usd | Float64 | 正規化された請求金額。 |
| failure_type | Utf8 | 安全に分類された失敗の理由。 |
DataFusion SQL
クエリをコピーする
sql
WITH failures AS (
SELECT
invoice_id,
MIN(timestamp_utc) AS first_failed_at,
MAX(amount_usd) AS amount_usd,
MIN(failure_type) AS failure_type
FROM invoice_events
WHERE event_name = 'invoice_payment_failed'
AND timestamp_utc >= now() - INTERVAL '60 days'
GROUP BY invoice_id
),
recoveries AS (
SELECT
invoice_id,
MIN(timestamp_utc) AS recovered_at
FROM invoice_events
WHERE event_name = 'invoice_paid'
GROUP BY invoice_id
)
SELECT
failures.failure_type,
COUNT(*) AS failed_invoices,
SUM(CASE
WHEN recoveries.recovered_at > failures.first_failed_at THEN 1
ELSE 0
END) AS recovered_invoices,
100.0 * SUM(CASE
WHEN recoveries.recovered_at > failures.first_failed_at THEN 1
ELSE 0
END) / NULLIF(COUNT(*), 0) AS recovery_rate_pct,
SUM(CASE
WHEN recoveries.recovered_at IS NULL THEN failures.amount_usd
ELSE 0.0
END) AS unrecovered_amount_usd
FROM failures
LEFT JOIN recoveries
ON recoveries.invoice_id = failures.invoice_id
GROUP BY failures.failure_type
ORDER BY unrecovered_amount_usd DESC;この読み取り専用クエリは、空の型付きテーブルに対して計画され、実行されます。 アパッチ DataFusion 45.2.0。決定論的なサンプル出力は合成され、個別にレビューされます。フィールド タイプ、しきい値、ビジネス定義を独自のデータと照合して検証します。 テスト方法を読んでください。
クエリ結果
障害の種類別の支払い回収率
認証が必要な障害は回復する頻度が最も低く、重大な収益リスクが残ります。
insufficient_funds
62.68%
expired_card
81.03%
authentication_required
50%
| failure_type | failed_invoices | recovered_invoices | recovery_rate_pct | unrecovered_amount_usd |
|---|---|---|---|---|
| insufficient_funds | 142 | 89 | 62.68 | 6,840 |
| expired_card | 58 | 47 | 81.03 | 1,320 |
| authentication_required | 36 | 18 | 50 | 2,940 |
合成出力例。運用上の決定に使用する前に、独自のイベント スキーマとしきい値に対してクエリを実行します。
例を再現する
パブリックフィクスチャをダウンロードする
JSON バンドルには、型付きイベント コントラクトが含まれています。 illustrative 入力行、正確な SQL、予想される出力、レビューメモ、およびエンジンのバージョン。 CSV には、表示された結果が含まれます。
SQL の仕組み
- 1CTE に障害が発生すると、プロバイダーの繰り返しの試行が危険にさらされて 1 つの請求書にまとめられます。
- 2回復は、記録された最初の失敗の後、支払いが成功した場合にのみカウントされます。
- 3未回収の金額がレートを補完するため、少数の高額な請求書が表示されたままになります。
決定すべきエッジケース
- 新しい支払い試行として処理する前に、Webhook 配信の重複を排除します。
- 返金とチャージバックには、正常に回復した後に別のライフサイクル イベントが必要です。
- 文書化されたレートで通貨を正規化し、調整のために元の通貨フィールドを保持します。
推奨されるダッシュボード
- バー: recovery_rate_pct by failure_type
- 統計: unrecovered_amount_usd
- 表: 最高額の未回収請求書とアカウント所有者
レシピを活用する
関連する機器とガイド
ソースデータを定義する
この分析のイベント スキーマ
分析を続ける
実際のイベントで実行する
テーブルを作成し、フィールドを調整して、結果を保存します
無料で始めて、構造化されたイベントを送信し、クエリ結果をグラフ、共有ダッシュボード ウィジェット、またはアラート入力として使用します。