Store tables in Apache Iceberg and query them from Contrast answers, agents, and dbt. See which storage and engine options need Enterprise.
The Contrast Warehouse is a data warehouse for AI agents. Your tables are stored in Apache Iceberg, and Contrast runs the SQL that Contrast answers, your agents, and dbt send to it. You can keep Snowflake or BigQuery alongside it.
| Capability | Free, Starter, Growth, and Scale | Enterprise |
|---|---|---|
| Iceberg tables in Contrast-managed storage | Yes | Yes |
| Sync sources into the warehouse, including realtime Postgres and Supabase ingestion | Yes | Yes |
| Read-only queries on Snowflake or BigQuery in place (cloud and warehouses) | Yes | Yes |
| Iceberg tables in storage buckets you own | No | Yes |
| Accelerate existing Iceberg tables you already manage | No | Yes |
| Route Iceberg queries to Trino or Apache Spark | No | Yes, when configured for your deployment |
Enterprise options are set up with our team. To ask about them, email founders@embrasure.ai.
On every plan, synced tables are stored in Apache Iceberg in Contrast-managed storage. Contrast adds agent-accelerated formats and indexes on top of those tables, so an agent query reads only the data it needs. Managed storage counts toward your plan's storage allowance.
On Enterprise, Iceberg tables can stay in storage buckets you own instead, and you can connect existing Iceberg tables for Contrast to accelerate. Those tables remain the source of truth, and other Iceberg-compatible tools can keep reading them.
Contrast sends each query to the engine that suits the data it needs:
| Data | Where the query runs |
|---|---|
| Tables in the Contrast Warehouse | Contrast-managed compute. On Enterprise, Trino or Apache Spark when configured and better suited to the query |
| Data only in Snowflake or BigQuery | Your warehouse, directly, with the read-only identity you connected |
Routing is automatic. Contrast answers, agents using MCP or the warehouse CLI, and SQL in Contrast all send SQL the same way, and Contrast picks the engine. See the SQL reference for the dialect and naming rules.
For a published model in Pipelines, add or edit its schedule and choose After its sources sync. Contrast watches the source tables and published pipeline tables that the model reads. A sync that inserts, updates, deletes, or reloads data makes a run due. A sync that finds no changes does not.
Changes are grouped for two minutes. Ongoing syncs hold the run for up to three hours; after that it runs with the data available. Paused sources do not trigger runs or hold them up. Continuous streaming sources have no completed sync, so they trigger runs at the minimum interval while active.
Publishing a result makes downstream pipelines due in turn. Cyclic dependencies are excluded from triggering to prevent feedback loops. Changes arriving during a run remain pending for one follow-up run. Saving this schedule begins watching from the current input state; use Run now to rebuild immediately. Resuming a paused pipeline catches up on changes since its last run.
The pipeline shows what changed, what it is waiting for, and when a run is due. Runs started by this frequency are labeled Sources synced in run history. Runs use the selected API key and the pipeline's existing retry, timeout, and failure-pause settings. For broader orchestration across systems, use Dagster or Airflow.
You don't need to move off Snowflake or BigQuery or sync every table to get started. Dashboards and scheduled jobs keep running on your existing warehouse. Connect your warehouse with a read-only identity, as described in cloud and warehouses, and sync tables into the Contrast Warehouse as agent workloads grow.
Workspace permissions apply to every query, whichever engine runs it. See security and permissions.