Skip to main content
Use this destination when you (or an agent) want an answer now — what a source returns for these ids, whether today’s file is clean, what a transformation produces — and have no reason to keep the rows. The run goes through the same chain as any other pipeline (preprocessor, data quality, transformation), and instead of a loader writing to a table, the rows are held for a short time so the caller can read them back. Scratch is a second lane beside ingestion, not a shortcut around it. Ingestion lands validated data beside your lake where it is observed, catalogued and queryable; scratch hands rows back once. Scratch results are not observed, not catalogued, not queryable later, and expire. If the rows turn out to be worth keeping, switch the pipeline’s destination to a real one — the tap, its schedule and its incremental cursor do not move.

Keep it, or answer now?

Never create a table just to read rows back once; never use scratch for data you will want again.

Configuration

There is nothing to configure per pipeline beyond its presence. Three rules apply:
  • Structured sources only. CSV, JSON and XML sources; unstructured (document) sources and vector destinations are not accepted.
  • A sample is required at create time. Like the object store destination, scratch needs the typed header so data quality rules and transformations can run — send the header row plus a few representative rows, exactly as for a structured destination.
  • Exclusive. A scratch pipeline lands nothing anywhere; it cannot be combined with another destination in the same pipeline.
In the pipeline wizard, choose Scratch under Destination. It shows no fields.

What a run produces

Data quality rules behave as everywhere else: a run either yields the whole transformed set (status success, or warning when rules flagged rows) or nothing (status error). There are no rejected rows to read. When the run finishes, its entry in the status rollup (GET /api/v1/pipeline/status?…&withrollup=true, or the MCP get_pipeline_status tool) carries the result: For small results the preview is the whole answer. Page past it only when resultTruncated is true.

Reading the result

Run detail page

Ops → Ingestion → the run. When the rollup carries a result, the page shows a View result panel: the record grid, Prev / Next paging, and a footer reading “showing N of M, expires at …”. Paging reads the stored result; it never re-runs the source.

REST

Pass pipelinetoken (one job) or publishertoken (the job a tap run submitted). offset defaults to 0; limit is clamped to the inline cap, so always advance by the page’s returnedCount, not by the limit you asked for.
See the Pipeline Status API for the full reference.

CLI

MCP

Agents read the first rows straight off the get_pipeline_status rollup (resultPreview) and call get_pipeline_result only when resultTruncated is true. See MCP Server.

Retention and sensitive data

A scratch result holds whatever the source returned, after transformation, in the platform’s built-in object store alongside staged documents. It is deleted by an hourly sweep once its retention window passes; reads after that return 410. Retention is the mitigation: keep it short, especially on shared hosts, and shorten it rather than lengthen it when sources carry personal or otherwise sensitive data. 0 expires results immediately. The inline preview cap and the retention window are deployment settings — see SCRATCH_INLINE_ROWS and SCRATCH_RETENTION_HOURS in the Configuration Reference.
A scratch pipeline still records its run history and data quality outcomes like any other pipeline. The rows are transient, and no dataset is registered in the catalog or the lineage graph.