omni_dbt prefix, you can build workbooks and topics once and dynamically swap the underlying data source between dbt environments - like production and a personal dev schema - without breaking your content.
Requirements
To set up or migrate to virtual schemas, you’ll need:- Connection Admin permissions on the Omni connection
- A configured dbt integration
Setting up virtual schemas
Enable the integration
- In Omni, click Connections.
- Locate the connection you want to work with.
- Click the dbt tab.
- Toggle on Enable Virtual Schemas.
omni_dbt_.You will need to build your model from views in the omni_dbt_ version of your schema for dbt virtual schemas to work.It’s recommended you only include these schemas going forward, by adding the following to your model file:Configure dbt environments
Confirm Omni model and dbt source mappings
Migrating existing content
If you already have a model built on physical schemas, you’ll need to migrate your logic to the virtual layer to unlock environment switching.Enable the integration
- In Omni, click Connections.
- Locate the connection you want to work with.
- Click the dbt tab.
- Toggle on Enable Virtual Schemas.
Migrate your semantic logic
omni_dbt_ prefixed virtual schema names. Specifically:- View files — Every view is recreated with the
omni_dbt_prefix. - Relationships/joins — Any joins you previously built are duplicated onto the corresponding virtual schema views.
- Shared model logic — Things like custom field definitions, measures (e.g. sum of revenue), labels, etc. are carried over to the virtual schema version.
Verify the migration results
omni_dbt virtual schema.Migrate your Omni content
- Open an Omni branch. This ensures that users won’t be disrupted while you perform the content migration.
-
In the model IDE, update your topics’
base_viewreferences to use theomni_dbt_views. - Use the Content Validator to find and replace physical schema references with virtual ones across all dashboards and tiles.
-
Within your branch, point Omni to a dev schema to verify that changes in your dbt development branch are reflecting correctly. Then:
- Open a workbook that uses a virtual schema.
- Open the Query Inspector by clicking the icon in the left navigation.
- Check that the underlying table name switches to the dev schema you selected in the dbt development settings page.
Clean up and go live
-
Once validated, hide the physical schemas to keep your model clean. Add the following to your model file:
- Merge your Omni branch.
Testing new dbt models in Omni branches
- Run
dbt buildin your local or cloud dev environment. - Push your dbt code to a branch (e.g.,
git push origin new-feature). - In Omni, create an Omni branch.
- In the Omni branch header, click the dbt settings button to navigate to your connection’s dbt development settings page where you can select your dbt dev environment.
- Return to your Omni branch and click Model > Refresh schema.
- In the dbt IDE, point to the dbt branch you want to align your Omni branch to.
Using virtual schemas with partial dbt builds
Enable deferral (recommended)
The recommended approach is to enable the Enable deferral checkbox when configuring your dev environment in Omni. When enabled, Omni automatically falls back to production builds for models not built in your dev environment, so you can run partial builds without needing to create clones or build the full project. For example, if you only build a subset of models in your dev schema, Omni will use the production version for everything else without any additional setup. See Configuring dbt environments for more information about setting up dev environments.Using dbt clone for zero-copy clones
While Omni’s native deferral feature handles most use cases,dbt clone remains a complementary option for creating zero-copy clones of production objects directly in your warehouse. This can be useful when you want physical copies of production tables in your dev schema:
- dbt Cloud
- dbt Core
- In dbt Cloud, enable the Defer to staging/production option in your development environment settings. This designates your production job as the reference point.
-
Once enabled, run
dbt clonefrom the dbt Cloud IDE. On warehouses that support it (like Snowflake), this creates zero-copy clones of all production objects in your development schema, creating the “stubs” or references Omni needs to see the entire project. -
Once cloned, you can run
dbt build -s <your_model>for just the specific models you are changing. Omni will now see the entire schema - the cloned production tables and your specific dev changes - allowing you to validate your work without a full project run.
Common questions
Why use virtual schemas?
Why use virtual schemas?
- Environment swapping: Toggle your Omni branch to point to a development schema (e.g.,
dbt_blobby) to test new logic before merging to production. - Stable references: Dashboards built on virtual schemas use a stable reference (e.g.,
omni_dbt__orders). When you switch environments, Omni automatically adjusts to fetch data from your dev schema, but the dashboard itself will remain unchanged. - Safety: You can validate dbt changes in an Omni branch before they hit production, ensuring dashboards don’t break after a dbt deployment.
Is it best practice to use virtual schemas instead of standard schemas?
Is it best practice to use virtual schemas instead of standard schemas?
Will using virtual schemas make it harder to see where data comes from?
Will using virtual schemas make it harder to see where data comes from?
Which schemas get a virtual schema?
Which schemas get a virtual schema?
How do I verify which environment is being queried?
How do I verify which environment is being queried?
How do I iterate on dbt models without pushing to production?
How do I iterate on dbt models without pushing to production?
Does dbt clone override local changes?
Does dbt clone override local changes?
dbt build or dbt run on a specific model, dbt replaces that clone with the table or view built from your code. Omni picks up the new version automatically.Should I keep virtual schemas or turn them off?
Should I keep virtual schemas or turn them off?
- Keep it if: You plan to preview how dbt code changes will impact your dashboards before pushing them to production.
- Turn it off if: You only have one dbt environment and never plan to use Omni for development preview work. Note that even if you turn off virtual schemas, dbt metadata like descriptions and primary keys will still flow into your standard schemas.
Why doesn't the SQL change in the SQL editor when I swap environments?
Why doesn't the SQL change in the SQL editor when I swap environments?
How are omni_dbt* schema names determined?
How are omni_dbt* schema names determined?
+schema: config you set in dbt_project.yml or in a model’s config block.Where Omni places models depends on if the model has a custom schema:- No custom schema - Placed in
omni_dbt - Custom schema - Placed in
omni_dbt_<custom_schema>
dbt_project.yml:- Models under
marketing/→omni_dbt_marketing - Models under
finance/→omni_dbt_finance - Models under
staging/(no custom schema) →omni_dbt
Troubleshooting
dbt environments aren't working in Omni
dbt environments aren't working in Omni
- Missing environment entry: Every developer needs their own entry, added under Environments on the dbt IDE’s Sync page. If an entry doesn’t exist for a given developer, Omni has nothing to resolve to when they switch environments.
-
Incorrect default schema: Each developer typically builds into their own personal schema in dbt (e.g.,
dbt_blobby). If the Omni connection’s Default schema doesn’t match where that developer’s dbt builds, Omni will look in the wrong place. -
Incorrect target name: The Target name dbt setting in Omni must exactly match the target that developer uses when running dbt (e.g.,
dev,default, or a custom value). See the Configure dbt environments section for guidance on where to find this in dbt Cloud. -
dbt hasn’t been run for that developer yet: If a developer has never run
dbt buildordbt runin their personal schema, there will be nothing for Omni to find. Once the environment is configured, open the dbt IDE’s Sync page, select that environment, and click Sync now. -
Missing warehouse permissions: The Omni service account must have access to each developer’s personal database and schema. If it doesn’t, you’ll see a warning like
"Database 'DEV_BLOBBY' does not exist or not authorized"in the health check. To verify, open the SQL editor in an Omni workbook and runSHOW DATABASES. If the developer’s database (e.g.,DEV_BLOBBY) doesn’t appear in the results, the service account hasn’t been granted access to it. Confirm the service account has been granted the correct permissions on that developer’s database and schema, then re-run the health check. - Missing environment variables: If your dbt project uses custom environment variables to control schema names, those need to be added per environment in Omni.
Virtual schemas are empty
Virtual schemas are empty
- Missing materialization: Omni can only see models that have been physically built in your warehouse. Ensure you executed
dbt runordbt buildin that specific environment. - Schema refresh needed: If the data exists in your warehouse but isn’t showing in Omni, trigger a schema refresh. See Schema refreshes for instructions.
- Permissions: The database user Omni uses must have
USAGEandSELECTpermissions on your personal development schema. - Inclusion filters: If your model file has
included_viewsorincluded_schemasdefined, you must explicitly add"omni_dbt*"to that list.
dbt environment switching not working on dashboard
dbt environment switching not working on dashboard
omni_dbt_ (virtualized) layer. If your topic or SQL shows a hardcoded schema name that doesn’t start with the virtual prefix, the environment switch will be ignored.Missing tables after running dbt clone
Missing tables after running dbt clone
dbt clone runs but certain tables still error out or don’t appear in Omni:- Check the Omni user’s permissions. Ensure the database user Omni uses (or your individual OAuth user) has
SELECTgrants on the production schemas being cloned. - Check production health: Verify that the models exist and have had a successful run in your production environment. If a model is missing from the production manifest, it cannot be deferred or cloned.
- Check your environment settings. If you have multiple environments (e.g., Staging and Prod) and are using dbt cloud, check that your dbt settings are deferring to the environment that actually contains your data before running the
dbt clonecommand.
Table not found error after switching to dev environment
Table not found error after switching to dev environment
dbt clone before switching environments in Omni to create zero-copy clones of all production tables. If errors persist, confirm your database user has permission to read the production schema — see dbt connection setup for more information.Next steps
- Schema refreshes — Sync model changes after switching environments.
- Content Validator — Find and bulk-replace schema references across content.
- Connection environments — Set up dynamic environments for safe testing.

