Vector RAG turns "sales in France" into a nearest neighbor guess. Structured RAG types each string column as a foreign key into a real reference table, so a question becomes an exact relational join against public data and your company's own reference tables.
The same question, at four levels of retrieval. Only the last one lets you check the answer.
| On structured data | Vector RAG | Structured RAG |
|---|---|---|
| How a string column is used | Embedded into an unnamed vector | Typed as a foreign key |
| Retrieval mechanism | Nearest neighbor similarity | Exact relational join |
| "Kehl" (German town near Strasbourg) | Wrongly included | Correctly excluded |
| Why a row was returned | A similarity score you cannot read | The join path, printable |
| Your private reference tables | Must be re-embedded, still fuzzy | Resolved exactly (tenant namespace) |
| LLM in the retrieval path | Yes | None |
Type each string column against a public or private reference table.
city → country → currency, or tier → your tier table. Each link is a key in a reference table.
The question becomes a deterministic join across those tables. No embeddings.
Return each row with the join path used.
Try the exact typed path on your own CSV, then add your company's reference tables when you need them.