Home

Save a result and query it later

Turn a slow query, local file, or remote URL into a table Pawrly can reuse. Agents get stable data without fetching or rebuilding the same answer every time.

Save the answer

Keep expensive work from happening twice

Materialize the output of a query, a local file, or a remote URL when you know you will need it again. Pawrly gives the saved result a table name your team and agents can reuse.
pawrly materialize
# 1 · persist a query result
pawrly materialize top_customers \
"SELECT customer, SUM(amount) AS total
FROM stripe.charges GROUP BY 1
ORDER BY 2 DESC LIMIT 10"
# 2 · a local file (csv / parquet / json)
pawrly materialize sales --file ./data/sales.csv
# 3 · a remote http(s) file
pawrly materialize prices --url https://ex.com/prices.parquet
Use it again

Query it like any other table

Once a result is saved, use it in normal SQL beside live APIs, files, MCP tools, and databases. The query does not need to know whether the rows came from a fresh source or a saved result.
pawrly sql
pawrly sql "
SELECT * FROM materialized.top_customers
ORDER BY total DESC
"
Refresh on purpose

Update it when the source changes

A saved table stays stable until you decide to change it. Refresh it to pull the latest data, replace it with a new file or query, or drop it when the snapshot is no longer useful.
manage
# re-run the stored origin and overwrite
pawrly cache refresh materialized.sales
# replace by re-materializing the same name
pawrly materialize sales --file ./data/sales-2025.csv
# remove the table and its file
pawrly materialize sales --drop
Stable by design

Good for snapshots and agent workflows

Use materialization when repeatability matters: a customer list for a campaign, a remote dataset you do not want to fetch on every run, or a query result an agent will reference throughout a task.

Agents can save a result through the same workspace. With allow_inline enabled, a query can return rows and save them for later in the same call.

inline directive
-- pawrly: materialize big_orders
SELECT * FROM stripe.charges WHERE amount > 1000

One binary. One config. Every source.

Start with one config file, then query APIs, files, MCP tools, and databases from the same command. Add MCP when you want agents to use that same workspace.