
“The report is no longer ordered. It just opens.”
A 15-minute ThoughtSpot report now opens in 0.2 seconds
A data warehouse under a surface that couldn't change — zero edits to queries or schema, on 200+ million products.
A US supplier to retail chains keeps over 200 million items in a data warehouse and reads them through ThoughtSpot. A report that used to take fifteen minutes now opens in 0.2 seconds; another, at four minutes, opens in 0.1.
The constraint was double: the queries are generated by the customer’s BI tool and cannot be changed, and the schema cannot be touched because the saved reports they use every day depend on it. The speed-up had to come from beneath an unchanged surface — through distribution and sort keys, materialized views refreshed daily, and moving exports into object storage.
The customer changed nothing. Their saved reports worked the same day, with the same queries.
The problem
The constraint
What we did
Redshift — because the client is moving to AWS anyway
The warehouse chosen by the client’s direction, not a feature list. Data arrives from the source system through export jobs to S3 and is loaded into the warehouse.
200M+ productsSchema untouched — we work beneath it
Distribution and sort keys chosen against the queries ThoughtSpot actually generates, not assumptions. Customers’ saved reports worked the same day.
Zero changes on the customer sideThe heaviest reports precomputed
Incrementally refreshed materialized views with dependent views, daily refresh, and a validation script that checks precomputed data never drifts from the source.
15 min → 0.2 s
The customers’ BI tool generates the SQL itself — we couldn’t change a single query. Data arrives from the source system through export jobs to S3, then loads into the warehouse.
The result
A fifteen-minute report was ninety times above the first limit. It now sits inside the second.
What we’d do differently
We would measure more reports. We have two measurements and both are dramatic, but twenty would show the distribution — where the speed-up holds and where it stops.
We would also wire the materialized views to refresh monitoring from the start. A daily cycle is enough here, but when one refresh is missed, the error shows up in a report rather than in a log.
- Amazon Redshift
- S3
- MySQL
- ThoughtSpot
- Materialized views
- Sort / dist keys