Skip to content

View

  • views run as owning role
  • only secure views can be shared
  • TEMPORARY views are session scoped

MATERIALIZED VIEW

  • limitations: can query only one table, no joins, only selected aggregated functions, no windowing functions, no UDFs
  • automatically maintained (charged for the maintenance)
  • no time-travel
  • supports clustering
  • no explicit permission needed if implicitly used by optimizer
  • always returns up-to-date data: Snowflake may combine current state with pending deltas to derive current data on the fly
  • MVs store aggregates per FDN instead of aggregating across table (Ref Darren Gardner office hour)
  • can create MV on shared data
  • BP: ideal when MV:
    • contain small fraction of rows/columns
    • expensive to compute (e.g. semi-structure data processing)
    • external table
    • underlying table doesn't change much

Semantic Views

  • identify BI data model by classifying data as dimension or metric
  • enables cortex analyst to work without having to create model YAML file
  • securable and queryable; e.g.
    select *
    from semantic_view (
            impression_sem_vw
            dimensions
                impression.event_date,
                impression.image_type
            metrics
                impression.ctr
        );
    
  • semantic views contain several sections
    • tables: list of tables and view; have primary keys
    • relationships: foreign key relationships between tables
    • facts: columns that are reported as is
    • dimensions: potentially rollup columns
    • metrics: measures that can be aggregated
  • example:
    create semantic view sem_vw
        tables (
            customer primary key (c_cust_sk),
            date as date_dim primary key (d_date_sk),
            item primary key (i_item_sk),
            storesales as store_sales primary key (ss_sold_date_sk, ss_item_sk, ss_item_sk)
        )
        relationships (
            sales_to_cust as storesales(ss_cust_sk)      references customer(c_cust_sk),
            sales_to_date as storesales(ss_sold_date_sk) references date(d_date_sk),
            sales_to_item as storesales(ss_item_sk)      references item(id_item_sk),
        )
        facts (
            item.cost as i_wholesale_cost,
            item.price as i_current_price,
            store.tax_rate as s_tax_pct,
        )
        dimensions (
            customer.birthyear as c_birth_year,
            customer.country as c_birth_country
        )
        metrics (
            storesales.total_cost as sum(item.cost),
            storesales.total_qty as sum(ss_quantity) with synonyms = ('total sales quantity', 'total sales amount')
        )