Dela via


CREATE MATERIALIZED VIEW

Gäller för:markerad ja Databricks SQL

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 stöds av en DLT-pipeline. Du kan uppdatera materialiserade vyer manuellt eller enligt ett schema.

Mer information om hur du utför en manuell uppdatering finns i REFRESH (MATERIALIZED VIEW eller STREAMING TABLE).

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

Materialiserade vyer kan bara skapas med hjälp av ett Pro- eller Serverlöst SQL-lager eller i en Delta Live Tables-pipeline.

Kommentar

Skapa och uppdatera åtgärder för materialiserade vyer och strömmande tabeller drivs av en serverlös Delta Live Tables-pipeline. Du kan använda Catalog Explorer för att visa detaljer om de underliggande pipelines i användargränssnittet. Se Vad är Katalogutforskaren?.

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 ] }

Parametrar

  • 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

    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_name

      Kolumnnamnen måste vara unika och mappas till frågans utdatakolumner.

    • column_type

      Anger kolumnens datatyp. Alla datatyper som stöds av Azure Databricks stöds inte av materialiserade vyer.

    • column_comment

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

    • column_constraint

      Lägger till en informationsprimärnyckel eller informationsutländsk nyckelbegränsning till en kolumn i en materialiserad vy. Om kolumntypen inte har angetts utelämnas kolumnbegränsningen.

    • MASK-sats

      Viktigt!

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

      Lägger till en kolumnmaskfunktion för att anonymisera känsliga data. Alla efterföljande frågor från den kolumnen får resultatet av utvärderingen av funktionen över kolumnen i stället för kolumnens ursprungliga värde. Detta kan vara användbart för detaljerad åtkomstkontroll där funktionen kan kontrollera identitets- eller gruppmedlemskapen för den anropande användaren för att avgöra om värdet ska redigeras. Om kolumntypen inte har angetts utelämnas kolumnmasken.

  • table_constraint

    Lägger till en primär nyckel eller informationsbaserad främmande nyckelbegränsning i tabellen i en materialiserad vy. Om kolumntypen inte har angetts hoppar systemet över tabellbegränsningen.

  • 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 som beskriver tabellen.

    • TBLPROPERTIES

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

      Använd den här inställningen om du vill ange den Delta Live Tables-körningskanal som används för att köra den här instruktionen. Ange värdet för egenskapen pipelines.channel till "PREVIEW" eller "CURRENT". Standardvärdet är "CURRENT". Mer information om Delta Live Tables-kanaler finns i Delta Live Tables-körningskanaler.

    • SCHEMA [ REFRESH ] schema_klausul

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

        Om du vill schemalägga en uppdatering som sker regelbundet använder du EVERY syntax. Om EVERY syntax anges uppdateras strömningstabellen eller den materialiserade vyn regelbundet med det angivna intervallet baserat på det angivna värdet, till exempel HOUR, HOURS, DAY, DAYS, WEEKeller WEEKS. I följande tabell visas godkända heltalsvärden 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 uppdatering med hjälp av ett Quartz cronvä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 har angetts utlö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 tabellen. Alla efterföljande frågor från tabellen tar emot en delmängd av de rader som funktionen utvärderar till boolesk TRUE. Detta kan vara användbart för detaljerad åtkomstkontroll där 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 databasfrå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 behörighet över de bastabeller som refereras av MV.
  • USE CATALOG behörighet i den överordnade katalogen och USE SCHEMA behörighet i det överordnade schemat.
  • CREATE MATERIALIZED VIEW behörighet för schemat för MV.

För att en användare ska kunna uppdatera MV:en behöver de:

  • USE CATALOG behörighet i den överordnade katalogen och USE SCHEMA behörighet i det överordnade schemat.
  • Ägarskap för MV eller REFRESH behörighet på MV.
  • Ägaren av MV måste ha SELECT-behörighet över bastabellerna 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 i den överordnade katalogen och USE SCHEMA behörighet i det överordnade schemat.
  • SELECT behörighet över den materialiserade vyn.

Radfilter och kolumnmasker

Viktigt!

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

Med radfilter kan du ange en funktion som tillämpas som ett filter när en tabellgenomsö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.

Med kolumnmasker kan du maskera en kolumns värden när en tabellgenomsökning hämtar rader. Alla framtida frågor som rör den kolumnen får resultatet av utvärderingen av funktionen över kolumnen och ersätter kolumnens ursprungliga värde.

Mer information om hur du använder radfilter och kolumnmasker finns i Filtrera känsliga tabelldata med hjälp av radfilter och kolumnmasker.

Hantera radfilter och kolumnmasker

Radfilter och kolumnmasker i materialiserade vyer bör läggas till via CREATE-instruktionen.

Funktionssätt

  • Refresh as Definer: När REFRESH MATERIALIZED VIEW-instruktionen uppdaterar en materialiserad vy körs radfilterfunktionerna med definierarens rättigheter (som tabellägare). Det innebär att tabelluppdateringen 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 materialiserade vyer över källtabeller som innehåller radfilter och kolumnmasker är uppdateringen av den materialiserade vyn alltid en fullständig uppdatering. En fullständig uppdatering ombearbetar alla data som är tillgängliga i källan med de senaste definitionerna. Detta säkerställer att säkerhetsprinciperna i källtabellerna utvärderas och tillämpas med de mest up-todatumdata och definitioner.

Överskådlighet

Använd DESCRIBE EXTENDED, INFORMATION_SCHEMAeller Katalogutforskaren för att undersöka befintliga radfilter och kolumnmasker som gäller för en viss materialiserad vy. Med den här funktionen kan användare granska och utvärdera dataåtkomst- och skyddsåtgärder för materialiserade vyer.

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 bara NULL värden finns kvar i 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å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 vyer stöder inte identitetskolumner eller surrogatnycklar.
  • Materialiserade vyer stöder inte kommandon för OPTIMIZE och VACUUM. Underhåll sker automatiskt.
  • Materialiserade vyer har inte stöd för förväntningar på att definiera datakvalitetsbegränsningar.

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;