Dela via


CREATE MATERIALIZED VIEW

Gäller för:markerad ja Databricks SQL

En materialiserad vy är en vy where 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 views backas upp av en DLT-pipeline. Du kan refresh materialisera views manuellt eller schemalagt.

För att lära dig mer om hur du utför en manuell refresh, se REFRESH (MATERIALIZED VIEW eller STREAMING TABLE).

Mer information om hur du schemalägger en refreshfinns i Exempel eller ALTER MATERIALIZED VIEW.

Kommentar

Skapa och refresh operationer på materialiserade views och strömmande tables drivs av en serverlös Delta Live-Tables pipeline. Du kan använda Catalog Explorer för att visa information om de bakomliggande pipelines i användargränssnittet. Se Vad är Catalog Explorer?.

Syntax

{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
  view_name
  [ column_list ]
  [ view_clauses ]
  [schedule_clause]
  AS query

column_list
   ( { column_name column_type column_properties } [, ...]
      [ , table_constraint ] [...])

   column_properties
      { NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]

view_clauses
  { PARTITIONED BY (col [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] schedule_clause |
    WITH { ROW FILTER clause } } [...]

schedule_clause
  { EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
    CRON cron_string [ AT TIME ZONE timezone_id ] }

Parameters

  • ERSÄTTA

    Om det anges ersätter du vyn och dess innehåll om det redan finns.

  • OM INTE FINNS

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

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

  • view_name

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

  • column_list

    Det är valfritt att etikettera columns i frågeresultatet för vyn. Om du anger en columnlist måste antalet column alias matcha antalet uttryck i frågan. Om ingen columnlist anges härleds alias från brödtexten i vyn.

    • column_name

      De column namnen måste vara unika och mappas till frågans utdata columns.

    • column_type

      Anger column:s datatyp. Alla datatyper som stöds av Azure Databricks stöds inte av materialiserade views.

    • column_comment

      En valfri STRING-literal som beskriver column. Det här alternativet måste anges tillsammans med column_type. Om typ column inte har angetts hoppas kommentaren column över.

    • column_constraint

      Lägger till en informerande primärnyckel eller informerande främmande nyckel constraint till column i en materialiserad vy. Om den column typen inte har angetts hoppas columnconstraint över.

    • MASK-sats

      Viktigt!

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

      Lägger till en column maskfunktion för att anonymisera känsliga data. Alla efterföljande frågor från den column tar emot resultatet av utvärderingen av den funktionen över column istället för det ursprungliga värdet av column. Detta kan vara användbart i detaljerade åtkomstkontrollsyften where funktionen kan kontrollera identitets- eller gruppmedlemskapen för den anropande användaren för att avgöra om värdet ska redigeras. Om column-typen inte har angetts hoppar man över column-masken.

  • table_constraint

    Lägger till en informerande primärnyckel eller informerande främmande nyckel constraint till table i en materialiserad vy. Om den column typen inte har angetts hoppas tableconstraint över.

  • view_clauses

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

    • PARTITIONERAD AV

      En valfri list av columns av table att partitiontable av.

    • KOMMENTAR view_comment

      En STRING-literal som beskriver table.

    • TBLPROPERTIES

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

      Använd den här inställningen om du vill ange Delta Live Tables runtime channel som används för att köra den här instruktionen. Set värdet på egenskapen pipelines.channel till "PREVIEW" eller "CURRENT". Standardvärdet är "CURRENT". För mer information om Delta Live Tables kanaler, se Delta Live Tables runtime-kanaler.

    • SCHEMA [ REFRESH ] schema_klausul

      • EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }

        Om du vill schemalägga en refresh som inträffar regelbundet, använder du syntaxen EVERY. Om EVERY syntax anges, uppdateras den strömmande table eller materialiserade vy regelbundet vid det angivna intervallet baserat på det angivna värdet, till exempel HOUR, HOURS, DAY, DAYS, WEEKeller WEEKS. Följande table visar godkända heltal values för number.

        Time unit Heltalsvärde
        HOUR or HOURS 1 <= H <= 72
        DAY or DAYS 1 <= D <= 31
        WEEK or WEEKS 1 <= W <= 8

        Kommentar

        Singular- och pluralformerna i den inkluderade tidsenheten är semantiskt likvärdiga.

      • CRON cron_string [ AT TIME ZONE timezone_id ]

        Så här schemalägger du en refresh med hjälp av ett kvarts cron- värde. Giltiga 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 saknas och sessionens tidszon inte är setutlöses ett fel. SCHEDULE är semantiskt likvärdigt med SCHEDULE REFRESH.

    • WITH ROW FILTER-sats

      Viktigt!

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

      Lägger till en radfilterfunktion i table. Alla efterföljande frågor från table tar emot en delmängd av de rader som funktionen utvärderar till booleskt sant. Detta kan vara användbart för detaljerad åtkomstkontroll where funktionen kan inspektera identitets- eller gruppmedlemskap för den anropande användaren för att avgöra om vissa rader ska filtreras.

  • AS-fråga

    En sökfråga som konstruerar vyn från bas tables eller annat views.

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 behörighet över den bas tables som refereras av MV.
  • USE CATALOG behörighet för den överordnade catalog och USE SCHEMA behörigheten för den överordnade schema.
  • CREATE MATERIALIZED VIEW behörighet på schema för MV.

För att en användare ska kunna refresh MV kräver de:

  • USE CATALOG behörighet för den överordnade catalog och USE SCHEMA behörigheten för den överordnade schema.
  • Ägarskap för MV eller REFRESH behörighet på MV.
  • Ägaren av MV måste ha SELECT behörighet för den bas tables som refereras av 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 catalog och USE SCHEMA behörigheten för den överordnade schema.
  • SELECT behörighet över den materialiserade vyn.

Radfilter och column-masker

Viktigt!

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

Med radfilter kan du ange en funktion som används som ett filter när en table genomsökning hämtar rader. Dessa filter säkerställer att efterföljande frågor endast returnerar rader som filterpredikatet utvärderas till sant för.

Column-masker gör att du kan maskera en column:s values när en table-skanning hämtar rader. Alla framtida frågeställningar som rör den column kommer att få resultatet av att funktionen utvärderats över column, och detta resultat ersätter column:s ursprungliga värde.

Mer information om hur du använder radfilter och column masker finns i Filtrera känsliga table data med hjälp av radfilter och column masker.

Hantera radfilter och Column maskar

Radfilter och column masker på materialiserade objekt views ska läggas till via CREATE-instruktionen.

Funktionssätt

  • Refresh som Definer: När REFRESH MATERIALIZED VIEW-instruktionen uppdaterar en materialiserad vy körs radfilterfunktionerna med definierarens rättigheter (som table ägare). Det innebär att tablerefresh använder säkerhetskontexten för användaren som skapade den materialiserade vyn.
  • Fråga: De flesta filter körs med definierarens rättigheter, men funktioner som kontrollerar användarkontexten (till exempel CURRENT_USER och IS_MEMBER) är undantag. Dessa funktioner körs som anropare. Den här metoden tillämpar användarspecifika datasäkerhets- och åtkomstkontroller baserat på den aktuella användarens kontext.
  • När du skapar materialiserad views över källa tables som innehåller radfilter och column-masker är refresh i den materialiserade vyn alltid en komplett refresh. En fullständig refresh ombearbetar alla tillgängliga data i källan med de senaste definitionerna. Detta säkerställer att säkerhetsprinciper på källan tables utvärderas och tillämpas med de mest up-todatumdata och definitioner.

Överskådlighet

Använd DESCRIBE EXTENDED, INFORMATION_SCHEMAeller Catalog Explorer för att undersöka befintliga radfilter och column masker som gäller för en viss materialiserad vy. Med den här funktionen kan användare utföra revision och granska dataåtkomst samt skyddsåtgärder för materialiserade views.

Begränsningar

  • När en materialiserad vy med en sum aggregering över en NULL-kapabel column har det sista icke-NULL-värdet borttaget från den column – och därmed bara NULLvalues finns kvar i den column – returnerar den materialiserade vyns resulterande aggregeringsvärde noll i stället för NULL.
  • Column-reference kräver inget alias. Referensuttryck som intecolumn kräver ett alias, som i följande exempel:
    • Tillåten: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Tillåts inte: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL måste anges manuellt tillsammans med PRIMARY KEY för att vara en giltig instruktion.
  • Materialiserade views stöder inte identitets- columns- eller surrogatnycklar.
  • Materialiserade views stöder inte kommandon för OPTIMIZE och VACUUM. Underhåll sker automatiskt.
  • Materialiserade views stöder inte förväntningar för att definiera begränsningar för datakvalitet.

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 every day.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
  COMMENT 'Daily sales numbers'
  SCHEDULE EVERY 1 DAY
  AS SELECT date AS date, sum(sales) AS sumOfSales
       FROM table1
       GROUP BY date;

-- Sets the runtime channel to "PREVIEW"
> CREATE MATERIALIZED VIEW mv_preview
  TBLPROPERTIES(pipelines.channel = "PREVIEW")
  AS SELECT * FROM RANGE(10)

-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id int NOT NULL,
    full_name string,
    movie_title string,
    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 or replace the materialized view to remove the table constraint and add a partition
> CREATE OR REPLACE MATERIALIZED VIEW subscribed_movies
  PARTITIONED BY (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 with a row filter and a column mask
> CREATE MATERIALIZED VIEW masked_view (
    id int,
    name string,
    region string,
    ssn string MASK catalog.schema.ssn_mask_fn
  )
  WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
  AS SELECT id, name, region, ssn
       FROM employees;