FOR DATA ENGINEERSDebug the payload
Debug the payload
before it breaks the DAG.
Event streams, webhook payloads, dead-letter records, config blobs — inspect the one malformed message, count events by type, or catch schema drift by asking. QDev writes the jq and runs it locally.
- ✓Find the record with the null field without a scratch script
- ✓Counts & rollups are exact — jq computes them, not a model
- ✓Production data & PII stay on your machine — never uploaded
⌘K
try
● EVENTS.NDJSON — 128,400 RECORDS · LOCAL
{
"events": [
{
"ts": "2026-07-04T09:14:02Z",
"type": "page_view",
"user_id": "u_1204",
"status": "ok"
},
{
"ts": "2026-07-04T09:14:03Z",
"type": "purchase",
"user_id": null,
"status": "ok"
},
{
"ts": "2026-07-04T09:14:05Z",
"type": "checkout",
"user_id": "u_0098",
"status": "error"
}
]
}↑ Ask a rollup or a validation — jq scans all 128k records locally. Only the schema is ever sent.
exact rollups · reproducible jq · nothing uploaded
SOUND FAMILIAR?
3am, the pipeline's red
Schema drift, silently
An upstream service started sending user_id: null and half a partition got dropped before anyone noticed.
The dead-letter queue
A few thousand records failed to parse. You need the one field that's wrong across all of them — fast.
NDJSON too big to grep
A 300 MB export won't open, and jq on the CLI means quoting a filter three times to get the escaping right.
ASK, DON'T SSH INTO A NOTEBOOK
From a bad record to a root cause
🧬
Catch schema drift
Find records missing a field, with a wrong type, or a value outside the enum you expected.
events where status isn't ok or error
📈
Roll up & count
Events by type, error rate per source, volume per hour — exact counts, computed by jq.
count events by type per hour
🧯
Triage the DLT
Isolate the malformed records and see exactly which field failed, across the whole batch.
records where amount is not a number
🪆
Flatten nested records
Explode a nested payload into flat rows ready to reload or diff against the source.
flatten payload.items into one row each
FITS YOUR STACK
Wherever your JSON lands
STREAMS
Kafka / events
Event and message payloads — grouped, counted, and validated locally.
NDJSON
Line-delimited
Log exports and batch files too big to open elsewhere.
WEBHOOKS
API payloads
Inspect the exact body that failed a downstream contract.
CONFIG
Configs & manifests
dbt, Airflow, package manifests — read the shape at a glance.
# QDev: "records where user_id is null" → paste the jq into your DLT replay
[.events[] | select(.user_id == null)] | length # 412 dropped
● PROD DATA STAYS IN PROD
Payloads never leave the tab.
Customer records, PII, tokens caught in an event — the values stay local. Only the schema (field names & types) and your question are ever sent, and only on the hosted tier. Handling regulated data? Run local AI, free, and nothing leaves at all.
✓jq runs in a sandboxed Web Worker — no network access
✓Hosted proxy is stateless & zero-retention — logs nothing
✓No data pipeline to a vendor, no sampling, no copy of your stream
One record is malformed. Find it.
Install free, keep your stream local, and let ⌘K write the jq that isolates the bad payload.