> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omni.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Syncing Snowflake semantic views

> Run a schema refresh to import Snowflake semantic views as topics, and learn what Omni creates for each one.

A [schema refresh](/modeling/develop/schema-refreshes) imports the semantic views on your Snowflake connection. Each semantic view arrives in Omni as one [topic](/modeling/topics). Its logical tables become views scoped to that topic, and its `RELATIONSHIPS` clause becomes the topic's relationships.

## Requirements

To sync semantic views, you'll need:

* A connection with the [integration set up](/connect-data/snowflake-semantic-views#setup)
* **Modeler** or **Connection Admin** permissions, which are required to [trigger schema refreshes](/modeling/develop/schema-refreshes#requirements)

## Triggering a sync

To sync, run a schema refresh on the model associated with the Snowflake connection. Omni imports new semantic views and updates topics whose semantic view changed in Snowflake. See [Schema refreshes](/modeling/develop/schema-refreshes) to learn how to trigger one manually or on a schedule.

If a semantic view is skipped, the schema refresh shows a warning. See [Troubleshooting](#troubleshooting) for each warning and how to resolve it.

## What Omni creates

One `.topic` file per semantic view:

* **`semantic_view` replaces [`base_view`](/modeling/topics/parameters/base-view).** The value is the fully qualified `CATALOG.SCHEMA.NAME` of the source. Because there is no fixed base view, Omni joins in only the views each query needs.
* **Views and relationships belong to the topic**, not the model, so they stay scoped to the semantic view they came from.
* **Names are schema-qualified when needed.** For a semantic view outside the connection's default schema, Omni prefixes the topic and view names with the schema (`sales__orders_users`), so same-named semantic views in different schemas both import.

## Which schemas Omni imports from

Omni imports a topic from every schema on the connection that contains a semantic view. To narrow that set, use [`included_schemas`](/modeling/models/included-schemas) or [`ignored_schemas`](/modeling/models/ignored-schemas) in the model file.

## Troubleshooting

<AccordionGroup>
  <Accordion title="My model has views from the previous version of this integration">
    Before Omni imported semantic views as topics, it created a folder of view files for each semantic view, and you may have built topics on them by hand. Those views and topics keep working. Each [schema refresh](/modeling/develop/schema-refreshes) regenerates them alongside the semantic view topics, so dashboards and workbooks built on them are unaffected.

    Two name collisions can appear in the schema refresh warnings:

    * **A topic from the previous version has the generated name** — the existing topic is kept and the schema refresh warns — see **Schema refresh warnings for skipped semantic views** below. Delete it and run a schema refresh to import the semantic view as a topic.
    * **A topic you wrote by hand has the generated name** — the generated content merges into your file and validation reports that the topic sets both `semantic_view` and `base_view` / `joins`. Rename or delete your topic and run a schema refresh.

    To retire the previous version's views and topics for a schema, delete them (or drop the semantic views in Snowflake) and run a schema refresh.
  </Accordion>

  <Accordion title="Semantic view not appearing after a schema refresh">
    * Confirm the schema containing the semantic view is included in your [connection's schema configuration](/connect-data/snowflake-semantic-views#include-the-schema-in-your-connection), and isn't excluded by [`included_schemas`](/modeling/models/included-schemas) or [`ignored_schemas`](/modeling/models/ignored-schemas) in the model file.
    * Confirm the [Omni database user](/connect-data/snowflake-semantic-views#grant-database-permissions) can read the semantic view and the tables behind it.
    * Check that [**Enable DW Semantic View Integration**](/connect-data/snowflake-semantic-views#enable-the-semantic-view-setting) is turned on in the connection settings.
    * Check the schema refresh for warnings. If Omni skipped the semantic view, the warning names it and the reason — see **Schema refresh warnings for skipped semantic views** below.
  </Accordion>

  <Accordion title="Schema refresh warnings for skipped semantic views">
    When Omni skips a semantic view during a schema refresh, the warning summary names the schema (`Skipped semantic view content in "<catalog>.<schema>"`) and the detail names the semantic view and the reason. A skipped semantic view creates no topic. If an earlier import created one, that topic stays in the model until a [schema refresh](/modeling/develop/schema-refreshes) that rebuilds the schema removes it.

    | Reason in the warning detail                                                                                                                            | What to do                                                                                                    |
    | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
    | `Omni could not parse the SQL expression for <TABLE.FIELD>`                                                                                             | Review that field's expression in Snowflake.                                                                  |
    | `Omni could not read a base table or SQL definition for its logical table <TABLE>`                                                                      | Confirm the logical table resolves in Snowflake and the Omni role can read it.                                |
    | `Omni could not determine the columns of the SQL definition for its logical table <TABLE>`                                                              | Confirm the inline SQL runs for the Omni role in the connection's default database and schema.                |
    | `it has more than 500 logical tables; semantic views this large are not supported`                                                                      | Split the semantic view.                                                                                      |
    | `its relationships form a cycle involving <T1, T2>; Omni requires an acyclic relationship graph`                                                        | Remove the cycle from `RELATIONSHIPS`.                                                                        |
    | `more than one join path connects <A> to <B>; Omni cannot yet choose between parallel join paths`                                                       | Keep one path between the two logical tables, or split them into separate semantic views.                     |
    | `its Omni topic name "<name>" is already taken by semantic view <OTHER>. Rename one of them`                                                            | Two semantic views in the schema resolve to the same Omni name. Rename one in Snowflake.                      |
    | `its Omni topic name "<name>" is taken by a previously imported topic. Delete the previously imported topic and refresh the schema again to import it.` | A topic from the previous version of this integration owns the name. Delete it and run a schema refresh.      |
    | `Failed to read semantic view ...` (views, tables, column types, dimensions and facts, metrics, or relationships)                                       | Check the grants in [step 1 of the setup](/connect-data/snowflake-semantic-views#grant-database-permissions). |
    | `semantic view metadata exceeds the cache size limit`                                                                                                   | Reach out to Omni support.                                                                                    |

    A single relationship can be skipped while the topic still imports (`The topic imports without this join.`). A view left with no relationship to the rest of the topic gets a validation warning:

    ```text theme={null}
    View "<view>" in topic "<topic>" has no relationship to the topic's other views. Queries combining it with other views will fail.
    ```

    Query that view on its own, or add an equality relationship in Snowflake.
  </Accordion>

  <Accordion title="Two topics show the same name">
    Two semantic views with the same name in different schemas share a label. Hover the Snowflake mark for the fully qualified `CATALOG.SCHEMA.NAME`.
  </Accordion>
</AccordionGroup>

## Next steps

* Look up [what each part of a definition becomes in Omni](/connect-data/snowflake-semantic-views/sync/metadata-reference)
* See a [semantic view and the topic Omni generates from it](/connect-data/snowflake-semantic-views/sync/example)
* [Query a semantic view topic](/connect-data/snowflake-semantic-views/querying)
