{
  "license": "CC BY 4.0",
  "licenseUrl": "https://creativecommons.org/licenses/by/4.0/",
  "recipe": {
    "slug": "api-reliability-by-release",
    "title": "Compare API Reliability by Release",
    "testedWith": "Apache DataFusion 45.2.0",
    "lastReviewed": "2026-07-27"
  },
  "contract": {
    "tableName": "api_requests",
    "schema": [
      {
        "name": "timestamp_utc",
        "type": "Timestamp",
        "description": "Request completion time."
      },
      {
        "name": "release_version",
        "type": "Utf8",
        "description": "Application release or build identifier."
      },
      {
        "name": "status_code",
        "type": "Int64",
        "description": "HTTP response status code."
      },
      {
        "name": "latency_ms",
        "type": "Float64",
        "description": "Request duration in milliseconds."
      }
    ]
  },
  "query": "SELECT\n  release_version,\n  COUNT(*) AS requests,\n  100.0 * SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END)\n    / NULLIF(COUNT(*), 0) AS error_rate_pct,\n  approx_percentile_cont(latency_ms, 0.95) AS p95_latency_ms\nFROM api_requests\nWHERE timestamp_utc >= now() - INTERVAL '7 days'\n  AND release_version IS NOT NULL\nGROUP BY release_version\nHAVING COUNT(*) >= 100\nORDER BY error_rate_pct DESC, p95_latency_ms DESC;",
  "fixtureKind": "schema-example",
  "inputRows": [
    {
      "timestamp_utc": "2026-07-28T10:00:00Z",
      "release_version": "release_2026_07_1",
      "status_code": 200,
      "latency_ms": 184
    },
    {
      "timestamp_utc": "2026-07-28T11:00:00Z",
      "release_version": "release_2026_07_2",
      "status_code": 503,
      "latency_ms": 926
    },
    {
      "timestamp_utc": "2026-07-28T12:00:00Z",
      "release_version": "release_2026_07_3",
      "status_code": 200,
      "latency_ms": 312
    }
  ],
  "illustrativeInputRows": [
    {
      "timestamp_utc": "2026-07-28T10:00:00Z",
      "release_version": "release_2026_07_1",
      "status_code": 200,
      "latency_ms": 184
    },
    {
      "timestamp_utc": "2026-07-28T11:00:00Z",
      "release_version": "release_2026_07_2",
      "status_code": 503,
      "latency_ms": 926
    },
    {
      "timestamp_utc": "2026-07-28T12:00:00Z",
      "release_version": "release_2026_07_3",
      "status_code": 200,
      "latency_ms": 312
    }
  ],
  "expectedOutput": {
    "columns": [
      "release_version",
      "requests",
      "error_rate_pct",
      "p95_latency_ms"
    ],
    "rows": [
      {
        "release_version": "2026.07.27.2",
        "requests": 22640,
        "error_rate_pct": 1.82,
        "p95_latency_ms": 1180
      },
      {
        "release_version": "2026.07.27.1",
        "requests": 18110,
        "error_rate_pct": 0.44,
        "p95_latency_ms": 620
      },
      {
        "release_version": "2026.07.26.4",
        "requests": 39400,
        "error_rate_pct": 0.31,
        "p95_latency_ms": 590
      }
    ]
  },
  "notes": [
    "The compact input rows demonstrate field names and JSON types; they are not claimed to generate the displayed aggregate by themselves.",
    "The expected output is deterministic synthetic review data for the documented output shape.",
    "Adapt time windows, thresholds, identities, and business definitions before operational use."
  ]
}