CertSafari
    Snowflake SnowPro Core Certification (COF-C03)· Lessons

    Domain 1 · Lesson 5/19

    Snowflake Dynamic Tables and View Types: Standard, Materialized, Secure

    Explain Snowflake storage concepts

    10 min read
    5.17% of exam
    5 sources
    Published 5 Oct 2026
    Docs as of 4 Oct 2026

    What you will be able to do

    • Explain how a dynamic table refreshes and what target lag does and does not guarantee
    • Distinguish standard (non-materialized) views from materialized views by storage, cost and speed
    • Recognize constructs that a materialized view definition cannot include
    • Decide when a view should be secure, and what securing it costs

    1.Dynamic tables: query results that Snowflake keeps current

    A dynamic table stores the results of a SELECT query and keeps them up to date. You write the query and set a target lag, and Snowflake works out which base tables the query depends on and refreshes the results on schedule.

    A dynamic table defined by its query, freshness target and refresh modesql
    CREATE OR ALTER DYNAMIC TABLE dt_orders
        TARGET_LAG = '10 minutes'
        WAREHOUSE = transform_wh
        REFRESH_MODE = INCREMENTAL
    AS
        SELECT
            order_id,
            customer_id,
            order_date,
            TRIM(UPPER(product_name)) AS product_name,
            quantity,
            unit_price,
            quantity * unit_price AS line_total,
            order_status
        FROM raw_orders
        WHERE order_status != 'returned';

    TARGET_LAG says how far behind the base tables the data is allowed to fall. It is a goal, not a guarantee. If refreshes take longer than expected, the actual lag can exceed the target. On intermediate tables you can set TARGET_LAG = DOWNSTREAM, so they refresh only when the tables that depend on them need fresh data.

    REFRESH_MODE sets how each refresh works. INCREMENTAL processes only the rows that changed. FULL recomputes the entire result. AUTO lets Snowflake choose when the table is created. ADAPTIVE works incrementally but reinitializes after large upstream changes. CUSTOM_INCREMENTAL lets you write your own refresh logic in DML.

    When dynamic tables read from each other, they form a pipeline. Snowflake infers the dependency graph from the queries and refreshes the tables in dependency order from a consistent snapshot, so you never have to script the execution order. If you want an external tool such as dbt or Airflow to trigger refreshes, set SCHEDULER = DISABLE.

    Checkpoint 1 of 7· Put it in order

    Put the steps of a dynamic table refresh in order

    1. 1.Snowflake computes either the changed rows (incremental) or the entire result set (full)
    2. 2.Snowflake applies the new results to the dynamic table atomically
    3. 3.Snowflake detects that the base tables have changed

    Checkpoint 2 of 7· Exam question

    An architect wants to explain how Snowflake physically stores a large fact table on disk. Which statement correctly describes the storage layer?

    Sources1

    2.Standard (non-materialized) views

    A dynamic table stores results. A standard view stores only the query. Snowflake has two kinds of view: non-materialized views, usually just called views, and materialized views. A non-materialized view is a named query definition. Snowflake runs the query each time the view is referenced and doesn't keep the results. Any query that returns a valid result can define one: a subset of columns, a range of rows, or a join of several tables. This is the most common kind of view. Because nothing is stored, it costs no storage, but it is slower than a materialized view.

    Checkpoint 3 of 7· Check yourself

    What happens when a query references a standard (non-materialized) view?

    Checkpoint 4 of 7· Exam question

    A BI dashboard runs a query that filters an orders table on `order_date` and selects only three of its forty columns. Why does this query typically complete faster than a `SELECT *` with no filter, even though both touch the same table?

    Sources2

    3.Materialized views

    A materialized view is called a view, but in many ways it behaves like a table. Its results are stored, which makes queries faster. In exchange, it needs storage space and ongoing maintenance, and both add cost. Materialized views can be clustered, and the clustering rules are much the same as for tables. A materialized view is also the documented way to speed up queries against an external table.

    Non-materialized and materialized views compared
    View typeResultsPerformanceCost and restrictions
    Non-materialized viewCreated by running the query when the view is referenced; not storedSlower than materialized viewsNo stored results; any valid query expression can define it
    Materialized viewStored, almost as though the results were a tableFaster accessRequires storage space and active maintenance; has restrictions that non-materialized views do not

    Because Snowflake has to keep stored results current, materialized views only allow a restricted set of query constructs. A materialized view can't include UDFs, window functions, HAVING, ORDER BY or LIMIT clauses, GROUP BY keys that aren't in the SELECT list, GROUPING SETS, ROLLUP or CUBE, nested subqueries, or the MINUS, EXCEPT and INTERSECT set operators. Only some aggregate functions are supported, such as COUNT, SUM, MIN, MAX and AVG, and aggregates can't be nested. A CREATE MATERIALIZED VIEW statement that uses any of these constructs fails validation.

    Checkpoint 5 of 7· Check yourself

    A CREATE MATERIALIZED VIEW statement fails validation. Which construct in its definition is a documented cause?

    Sources234

    4.Secure views

    Standard and materialized views can both be made secure. Securing a view addresses two weaknesses of non-secure views. First, some internal optimizations for views need access to the base table data, and user code such as a UDF could use that access to reveal data the view is supposed to hide. Secure views don't use those optimizations. Second, anyone can normally see a view's definition, including the underlying table names. A secure view shows its definition only to authorized users, meaning those who have been granted the role that owns the view. For anyone else, the definition doesn't appear in SHOW VIEWS, SHOW MATERIALIZED VIEWS, GET_DDL or the Information Schema VIEWS view.

    To create a secure view, add the SECURE keyword to CREATE VIEW or CREATE MATERIALIZED VIEW. To convert an existing view in either direction, set or unset SECURE with ALTER. The protection has a cost: without those optimizations, secure views can run more slowly. Use them for views built for data privacy, not for views that exist only to make queries more convenient.

    Checkpoint 6 of 7· Check yourself

    Which statement about secure views is correct?

    Checkpoint 7 of 7· Exam question

    A 50 TB events table is loaded continuously and most analytical queries filter on `event_timestamp`, but new rows no longer arrive in timestamp order because of a change in the upstream pipeline. Query pruning has degraded noticeably. What should the team do?

    Sources5

    Exam traps

    Each one states something that sounds right. Open it to see what is actually true.

    1. 1.A dynamic table's target lag guarantees that data is never more stale than the configured value.Why is that wrong?

      Target lag is what Snowflake aims for. Actual lag can exceed it when refreshes take longer than expected.

      Covered in Dynamic tables: query results that Snowflake keeps current

    2. 2.A materialized view is just a view, so like a standard view it costs nothing to store.Why is that wrong?

      A materialized view stores its results like a table, and that storage and maintenance add cost.

      Covered in Materialized views

    3. 3.Making every view secure is good practice, even views that exist only to simplify queries.Why is that wrong?

      Secure views are meant for data privacy. They can run more slowly, so they shouldn't be used for views that exist only for convenience.

      Covered in Secure views

    Sources

    Every claim above is drawn from one of these pages, quoted as it was written on the date shown.

    1. 1.
      “A dynamic table materializes the results of a SELECT query and keeps them up to date.”
      ↩︎ Dynamic tables: query results that Snowflake keeps current
      “INCREMENTAL processes only the rows that changed since the last refresh. FULL refreshes the entire result set.”
      ↩︎ Dynamic tables: query results that Snowflake keeps current
      “You don’t need to declare dependencies or script the execution order.”
      ↩︎ Dynamic tables: query results that Snowflake keeps current
      “actual lag can exceed the target when refreshes take longer than expected.”
      ↩︎ Exam trap 1
      “The new results are applied to the dynamic table atomically, so readers never see a partial refresh.”
      ↩︎ Checkpoint
    2. 2.
      “A view is basically a named definition of a query.”
      ↩︎ Standard (non-materialized) views
      “Non-materialized views are the most common type of view.”
      ↩︎ Standard (non-materialized) views
      “A materialized view’s results are stored, almost as though the results were a table.”
      ↩︎ Materialized views
      “This allows faster access, but requires storage space and active maintenance, both of which incur additional costs.”
      ↩︎ Exam trap 2
      “The results are not stored for future use.”
      ↩︎ Checkpoint
    3. 3.
      “You can cluster materialized views, as well as tables.”
      ↩︎ Materialized views
    4. 4.
      “Nesting of subqueries within a materialized view. The MINUS, EXCEPT, or INTERSECT set operators.”
      ↩︎ Materialized views
      “A materialized view cannot include: UDFs (this limitation applies to all types of user-defined functions, including external functions). Window functions.”
      ↩︎ Checkpoint
    5. 5.
      “the view definition and details are visible only to authorized users”
      ↩︎ Secure views
      “To create a secure view, specify the SECURE keyword in the CREATE VIEW or CREATE MATERIALIZED VIEW command.”
      ↩︎ Secure views
      “Secure views can execute more slowly than non-secure”
      ↩︎ Secure views
      “Secure views should not be used for views that are defined solely for query convenience”
      ↩︎ Exam trap 3
      “Secure views do not utilize these optimizations, ensuring that users have no access to the underlying data.”
      ↩︎ Checkpoint

    Ready to test yourself?

    Practise the 29 questions on this subdomain.

    Spotted a mistake, or was something unclear? Tell us.