Your bucket is already a warehouse.
Open source · Apache 2.0
Lens mounts your Parquet files as SQL tables and lets you query them from the terminal, from a notebook, in plain English, or from an AI agent — over the same files.
pip install dataspoc-lens What Lens does:
One query layer, four ways in — and no copy of your data anywhere else.
Lens points DuckDB at the Parquet in your bucket and exposes it as tables. Engineers get a SQL shell, analysts get Jupyter or Marimo, everyone else asks in plain English, and agents connect over MCP. Every route reads the same files, so nobody argues about which number is right.
What you get
-
SQL shell
DuckDB over your lake, with the catalog mounted. Joins across buckets you have access to, no warehouse in between.
-
Ask in plain English
lens askwrites the SQL, runs it, and shows you both — so the query is auditable, not a black box. -
Notebooks
Jupyter and Marimo launch with every bucket already mounted.
-
Local cache
Pull hot tables to disk, track staleness, refresh on demand. Repeat queries stop hitting object storage.
-
MCP server
list_tables,query(sql)andask(question)exposed to Claude, Cursor or any MCP client. Real SQL against real rows — no embeddings, no vector store. -
Python SDK
LensClientfor CrewAI, LangGraph, AutoGen or your own agent loop.
In practice
Point it at a bucket. Start asking.
$ pip install dataspoc-lens
$ dataspoc-lens add-bucket s3://my-data
3 buckets, 47 tables mounted
$ dataspoc-lens ask "top customers by revenue"
SELECT customer, SUM(total) FROM ... GROUP BY 1
Acme Corp leads with $247k, Initech at $189k