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 by default — logs nothing unless you opt in to training sharing
✓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.