이벤트 계약
쿼리가 예상하는 필드
| 필드 | 유형 | 그것이 존재하는 이유 |
|---|---|---|
| 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 실패로 인해 공급자의 반복적인 시도가 위험에 처한 하나의 청구서로 축소됩니다.
- 2복구는 기록된 첫 번째 실패 이후 결제가 성공한 경우에만 계산됩니다.
- 3미회수 금액은 요율을 보완하므로 소수의 대형 송장만 표시됩니다.
결정해야 할 극단적인 경우
- 새로운 결제 시도로 처리하기 전에 웹훅 전달을 중복 제거하세요.
- 환불 및 지불 거절에는 성공적인 복구 후 별도의 수명 주기 이벤트가 필요합니다.
- 문서화된 환율로 통화를 표준화하고 조정을 위해 원래 통화 필드를 유지합니다.
추천 대시보드
- 바: recovery_rate_pct by failure_type
- 통계: unrecovered_amount_usd
- 표: 가장 높은 가치의 복구되지 않은 송장 및 계정 소유자
레시피를 활용해 보세요
관련 계측 및 가이드
소스 데이터 정의
이 분석을 위한 이벤트 스키마
분석 계속하기
실제 이벤트에서 실행
테이블을 만들고, 필드를 조정하고, 결과를 저장하세요.
무료로 시작하고, 구조화된 이벤트를 보내고, 쿼리 결과를 차트, 공유 대시보드 위젯 또는 알림 입력으로 사용하세요.