One call: vp.collections.export(name, "out/") writes every vector's original id, its float32 values at your original dimension, and all its metadata into a directory of parquet files that pandas, DuckDB, Polars, or any parquet reader opens directly. There are no export fees, no row ceilings, no tier or plan restrictions, and no throttling — your data is yours, and leaving (or just backing up) is a first-class operation at any scale.
End to end with the 5,000-film sample corpus:
from veep import VP, samples
df = samples.dataframe()
vp = VP.from_creds()
vp.collections.create("export-answer-demo", tier="hot")
vp.vectors.upsert("export-answer-demo", dataframe=df)
result = vp.collections.export("export-answer-demo", "out/")
print(result)
ExportResult(job_id='ca6209e4-b3bd-47ff-9f64-27c5c18e182c', path=PosixPath('out'), parts=1, total_bytes=9332663, status='complete')
Everything comes back, readable with ordinary tools:
import pandas as pd
back = pd.read_parquet("out/")
print(back.shape)
print(back.columns.tolist())
(5000, 6)
['id', 'vector', 'title', 'year', 'genre', 'plot']
All 5,000 rows, ids intact, every metadata column alongside the vectors. If we padded your vectors internally for SIMD alignment, the padding is stripped on the way out — you get your original shape back.
The details
- Chunked parts. Exports are split into parts of roughly 100 MB after compression, each listed in a
_manifest.jsonwith filename, byte size, and row count — so large exports download resumably and in parallel. A small collection gets one part, like the run above. - Snapshot-at-start. The export reflects the collection at the moment the job started. Queries and upserts continue normally throughout; writes that land mid-export appear in the next one.
- Async for big collections. Pass
wait=Falseto queue the job and return immediately, andsend_email=Trueto be notified when it's done:vp.collections.export("big", "out/", wait=False, send_email=True). - What's not included: the index structures we built to make your queries fast. Those are tied to specific strategy choices and don't port across vector databases — your ids, vectors, and metadata are the portable payload, and they all come back.
The parquet output loads anywhere — including back into pgvector, if you ever want to reverse the trip described in How do I migrate from pgvector?. For the full walkthrough (manifests, parallel downloads, LangChain's store.export()), see Exporting your data.
vp.collections.delete("export-answer-demo")
