Dela via


SKAPA MATERIALISERAD VY

Gäller för:markerad ja Databricks SQL

Viktigt!

Den här funktionen finns som allmänt tillgänglig förhandsversion.

En materialiserad vy är en vy där förberäknade resultat är tillgängliga för frågor och kan uppdateras för att återspegla ändringar i indata. Varje gång en materialiserad vy uppdateras beräknas frågeresultaten om för att återspegla ändringar i överordnade datamängder. Alla materialiserade vyer backas upp av en DLT-pipeline. Du kan uppdatera materialiserade vyer manuellt, enligt ett schema eller genom att schemalägga DLT-pipelinen där de finns.

Syntax

CREATE MATERIALIZED VIEW [IF NOT EXISTS]
  view_name
  [ column_list ]
  [ table_constraints ]
  [ view_clauses ]
  AS query

column_list
   ( { column_alias [ COMMENT column_comment | column_constraint ] [...] } [, ...] [ , table_constraint ] [...])

table_constraints
   ( table_constraint [, ...] )

view_clauses
  { PARTITIONED BY (col [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] CRON cron_string [ AT TIME ZONE timezone_id ] } [...]

Parametrar

  • OM INTE FINNS

    Skapar vyn om den inte finns. Om det redan finns en vy med det här namnet ignoreras -instruktionen CREATE VIEW .

    Du kan ange högst en av IF NOT EXISTS eller OR REFRESH.

  • view_name

    Namnet på den nyligen skapade vyn. Det fullständigt kvalificerade vynamnet måste vara unikt.

  • column_list

    Du kan också etikettera kolumnerna i frågeresultatet i vyn. Om du anger en kolumnlista måste antalet kolumnalias matcha antalet uttryck i frågan. Om ingen kolumnlista anges härleds alias från brödtexten i vyn.

    • column_alias

      Kolumnaliasen måste vara unika.

    • column_comment

      En valfri STRING literal som beskriver kolumnaliaset.

    • column_constraint

      Viktigt!

      Den här funktionen finns som allmänt tillgänglig förhandsversion.

      Lägger till en informations primärnyckel eller informationsnyckelbegränsning i kolumnen i en materialiserad vy. Begränsningar stöds inte för materialiserade vyer i hive_metastore katalogen.

  • table_constraint

    Viktigt!

    Den här funktionen finns som allmänt tillgänglig förhandsversion.

    Lägger till en informations primärnyckel eller informationsmässiga begränsningar för sekundärnyckeln i en materialiserad vy. Begränsningar stöds inte för materialiserade vyer i hive-metastore katalogen.

  • view_clauses

    Du kan också ange partitionering, kommentarer, användardefinierade egenskaper och ett uppdateringsschema för den nya materialiserade vyn. Varje undersats kan bara anges en gång.

    • PARTITIONERAD AV

      En valfri lista över kolumner i tabellen som tabellen ska partitioneras efter.

    • KOMMENTAR view_comment

      En STRING literal för att beskriva tabellen.

    • TBLPROPERTIES

      Du kan också ange en eller flera användardefinierade egenskaper.

    • SCHEMA [ UPPDATERA ] CRON cron_string [ AT TIME ZONE timezone_id ]

      Om det tillhandahålls schemalägger du strömningstabellen eller den materialiserade vyn för att uppdatera sina data med det angivna cron-schemat för quartz . Endast time_zone_values accepteras. AT TIME ZONE LOCAL stöds inte. Om AT TIME ZONE den saknas används tidszonen för sessionen. Om AT TIME ZONE är frånvarande och sessionens tidszon inte har angetts utlöses ett fel. SCHEDULE är semantiskt likvärdigt med SCHEDULE REFRESH.

      Du kan inte använda syntaxen SCHEDULE i en pipelinedefinition för Delta Live Tables.

  • AS-fråga

    En fråga som konstruerar vyn från bastabeller eller andra vyer.

Behörigheter som krävs

Användaren som skapar en materialiserad vy (MV) är MV-ägare och måste ha följande behörigheter:

  • SELECT över de bastabeller som refereras av MV.
  • USE CATALOG behörighet för den överordnade katalogen och behörigheten USE SCHEMA för det överordnade schemat.
  • CREATE behörighet i schemat för MV.

Endast ägaren kan REFRESH MV.

För att en användare ska kunna köra frågor mot MV:en behöver de:

  • USE CATALOG behörighet för den överordnade katalogen och behörigheten USE SCHEMA för det överordnade schemat.
  • SELECT behörighet över den materialiserade vyn.

Begränsningar

  • När en materialiserad vy med en sum aggregering över en NULL-kapabel kolumn har det sista icke-NULL-värdet borttaget från den kolumnen – och därmed endast NULL värden finns kvar i den kolumnen – returnerar den materialiserade vyns resulterande aggregeringsvärde noll i stället för NULL.
  • Kolumnreferens kräver inget alias. Referensuttryck som inte är kolumner kräver ett alias, som i följande exempel:
    • Tillåtet: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Tillåts inte: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • Materialiserade vyer stöder inte identitetskolumner eller surrogatnycklar.
  • Materialiserade vyer stöder inte ad hoc OPTIMIZE - och VACUUM kommandon. Underhåll sker automatiskt.

Exempel

-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create and schedule a materialized view to be refreshed daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
  COMMENT 'Daily sales numbers'
  SCHEDULE CRON '0 0 0 * * ? *'
  AS SELECT date AS date, sum(sales) AS sumOfSales
       FROM table1
       GROUP BY date;

-- Create a materialized view with a column constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id NOT NULL PRIMARY KEY,
    full_name,
    movie_title
  )
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id NOT NULL,
    full_name,
    movie_title,
    CONSTRAINT movie_pk PRIMARY KEY(member_id)
  )
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create a materialized view without column list
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    CONSTRAINT movie_pk PRIMARY KEY(member_id)
  )
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;