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')
  )