Delen via


CREATE MATERIALIZED VIEW

Van toepassing op:vinkje als ja aan Databricks SQL

Een gerealiseerde weergave is een weergave waarin vooraf ingevulde resultaten beschikbaar zijn voor query's en kunnen worden bijgewerkt om wijzigingen in de invoer weer te geven. Telkens wanneer een gerealiseerde weergave wordt vernieuwd, worden queryresultaten opnieuw berekend om wijzigingen in upstream-gegevenssets weer te geven. Alle gematerialiseerde weergaven worden ondersteund door een DLT-pijplijn. U kunt gematerialiseerde views handmatig of volgens een schema vernieuwen.

Zie REFRESH (MATERIALIZED VIEW of STREAMING TABLE)voor meer informatie over het uitvoeren van handmatig vernieuwen.

Zie Voorbeelden of ALTER MATERIALIZED VIEWvoor meer informatie over het plannen van een vernieuwing.

Gerealiseerde weergaven kunnen alleen worden gemaakt met behulp van een Pro- of Serverless SQL Warehouse, of binnen een Delta Live Tables-pijplijn.

Notitie

Het aanmaken en vernieuwen van materiaalweergaven en streamingtabellen worden uitgevoerd door een serverloze pijplijn van Delta Live Tables. U kunt Catalog Explorer gebruiken om details over de back-uppijplijnen in de gebruikersinterface weer te geven. Zie Wat is Catalog Explorer?.

Syntaxis

{ 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 [, ...]) |
    CLUSTER BY clause |
    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

  • VERVANGEN

    Indien opgegeven, vervangt u de weergave en de inhoud ervan als deze al bestaat.

  • ALS DEZE NIET BESTAAT

    Hiermee maakt u de weergave als deze niet bestaat. Als er al een weergave met deze naam bestaat, wordt de CREATE MATERIALIZED VIEW instructie genegeerd.

    U kunt maximaal één van IF NOT EXISTS of OR REPLACE.

  • view_name

    De naam van de zojuist gemaakte weergave. De volledig gekwalificeerde weergavenaam moet uniek zijn.

  • column_list

    U kunt desgewenst de kolommen in het queryresultaat van de weergave labelen. Als u een kolomlijst opgeeft, moet het aantal kolomaliassen overeenkomen met het aantal expressies in de query. Als er geen kolomlijst is opgegeven, worden aliassen afgeleid van de hoofdtekst van de weergave.

    • column_name

      De kolomnamen moeten uniek zijn en corresponderen met de uitvoerkolommen van de query.

    • column_type

      Hiermee geeft u het gegevenstype van de kolom op. Niet alle gegevenstypen die worden ondersteund door Azure Databricks, worden ondersteund door gerealiseerde weergaven.

    • column_comment

      Een optionele STRING literal die de kolom beschrijft. Deze optie moet samen met column_type. Als het kolomtype niet is opgegeven, wordt de kolomopmerking overgeslagen.

    • column_constraint

      Voegt een informatieve primaire sleutel of informatieve refererende sleutelbeperking toe aan de kolom in een gerealiseerde weergave. Als het kolomtype niet is opgegeven, wordt de kolombeperking overgeslagen.

    • MASK-component

      Belangrijk

      Deze functie is beschikbaar als openbare preview.

      Voegt een kolommaskerfunctie toe om gevoelige gegevens anoniem te maken. Alle volgende query's van die kolom ontvangen het resultaat van het evalueren van die functie ten opzichte van de kolom in plaats van de oorspronkelijke waarde van de kolom. Dit kan handig zijn voor verfijnde toegangsbeheerdoeleinden, waarbij de functie de identiteit of groepslidmaatschappen van de aanroepende gebruiker kan inspecteren om te bepalen of de waarde moet worden bewerkt. Als het kolomtype niet is opgegeven, wordt het kolommasker overgeslagen.

  • table_constraint

    Hiermee voegt u een informatieve primaire sleutel- of informatieve buitenlandse sleutelbeperking toe aan de tabel in een gematerialiseerde weergave. Als het kolomtype niet is opgegeven, wordt de tabelbeperking overgeslagen.

  • view_clauses

    Geef desgewenst partitionering, opmerkingen, door de gebruiker gedefinieerde eigenschappen en een vernieuwingsschema op voor de nieuwe gerealiseerde weergave. Elke subcomponent mag slechts eenmaal worden opgegeven.

    • GEPARTITIONEERD DOOR

      Een optionele lijst met kolommen van de tabel voor het partitioneren van de tabel.

      Notitie

      Liquid clustering biedt een flexibele, geoptimaliseerde oplossing voor clustering. Overweeg het gebruik van CLUSTER BY in plaats van PARTITIONED BY voor materialized views.

    • CLUSTER BY

      Een optionele clausule om te clusteren op basis van een subset van kolommen. Zie Liquid Clustering gebruiken voor Delta-tabellenvoor meer informatie over liquide clustering.

      Delta Lake liquid clustering kan niet worden gecombineerd met PARTITIONED BY.

    • OPMERKING view_comment

      Een letterlijke STRING om de tabel te beschrijven.

    • TBLPROPERTIES

      U kunt desgewenst een of meer door de gebruiker gedefinieerde eigenschappen instellen.

      Gebruik deze instelling om het runtimekanaal van Delta Live Tables op te geven dat wordt gebruikt om deze instructie uit te voeren. Stel de waarde van de eigenschap pipelines.channel in op "PREVIEW" of "CURRENT". De standaardwaarde is "CURRENT". Voor meer informatie over Delta Live Tables-kanalen, zie Runtime-kanalen van Delta Live Tables.

    • PLANNING [ REFRESH ] planbepaling

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

        Als u een vernieuwing wilt plannen die periodiek plaatsvindt, gebruikt u EVERY syntaxis. Als EVERY syntaxis is opgegeven, wordt de streamingtabel of gematerialiseerde weergave periodiek vernieuwd met het opgegeven interval op basis van de opgegeven waarde, zoals HOUR, HOURS, DAY, DAYS, WEEKof WEEKS. De volgende tabel bevat geaccepteerde gehele getallen voor number.

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

        Notitie

        De enkelvoudige en meervoudvormen van de opgenomen tijdseenheid zijn semantisch gelijkwaardig.

      • CRON cron_string [ AT TIME ZONE timezone_id ]

        Een vernieuwing plannen met behulp van een kwarts cron waarde. Geldige time_zone_values worden geaccepteerd. AT TIME ZONE LOCAL wordt niet ondersteund.

        Als AT TIME ZONE deze afwezig is, wordt de sessietijdzone gebruikt. Als AT TIME ZONE afwezig is en de sessietijdzone niet is ingesteld, wordt er een fout gegenereerd. SCHEDULE is semantisch gelijk aan SCHEDULE REFRESH.

    • WITH ROW FILTER-clausule

      Belangrijk

      Deze functie is beschikbaar als openbare preview.

      Hiermee voegt u een rijfilterfunctie toe aan de tabel. Alle volgende query's uit die tabel ontvangen een subset van de rijen waarvoor de functie booleaanse WAAR oplevert. Dit kan handig zijn voor verfijnde toegangsbeheerdoeleinden, waarbij de functie de identiteit of groepslidmaatschappen van de aanroepende gebruiker kan inspecteren om te bepalen of bepaalde rijen moeten worden gefilterd.

  • AS-query

    Een query waarmee de weergave wordt samengesteld op basistabellen of andere weergaven.

Vereiste machtigingen

De gebruiker die een gerealiseerde weergave (MV) maakt, is de MV-eigenaar en moet over de volgende machtigingen beschikken:

  • SELECT bevoegdheid voor de basistabellen waarnaar wordt verwezen door de MV.
  • USE CATALOG bevoegdheid voor de bovenliggende catalogus en USE SCHEMA bevoegdheid voor het bovenliggende schema.
  • CREATE MATERIALIZED VIEW privilege op het schema voor de MV.

Voor een gebruiker die de MV kan vernieuwen, is het volgende vereist:

  • USE CATALOG bevoegdheid voor de bovenliggende catalogus en USE SCHEMA bevoegdheid voor het bovenliggende schema.
  • Eigendom van de MV of REFRESH bevoegdheid op de MV.
  • De eigenaar van de MV moet over het SELECT privilege beschikken voor de basistabellen waar de MV naar verwijst.

Voor een gebruiker die een query kan uitvoeren op de MV, is het volgende vereist:

  • USE CATALOG bevoegdheid voor de bovenliggende catalogus en USE SCHEMA bevoegdheid voor het bovenliggende schema.
  • SELECT bevoegdheden voor de gerealiseerde weergave.

Rijfilters en kolommaskers

Belangrijk

Deze functie is beschikbaar als openbare preview.

Met rijfilters kunt u een functie opgeven die als filter wordt toegepast wanneer een tabelscan rijen ophaalt. Deze filters zorgen ervoor dat volgende query's alleen rijen retourneren waarvoor het filterpredicaat waar wordt geëvalueerd.

Met kolommaskers kunt u de waarden van een kolom maskeren wanneer een tabelscan rijen ophaalt. Alle toekomstige query's met betrekking tot die kolom ontvangen het resultaat van de evaluatie van de functie over de kolom, waarbij de oorspronkelijke waarde van de kolom wordt vervangen.

Zie Gevoelige tabelgegevens filteren met rijfilters en kolommaskersvoor meer informatie over het gebruik van rijfilters en kolommaskers.

Rijfilters en kolommaskers beheren

Rijfilters en kolommaskers voor gematerialiseerde weergaven moeten worden toegevoegd via de CREATE-instructie.

Gedrag

  • Vernieuwen als Definieerder: Wanneer de instructie REFRESH MATERIALIZED VIEW een gerealiseerde weergave vernieuwt, worden rijfilterfuncties uitgevoerd met de rechten van de definieerder (als de tabel-eigenaar). Dit betekent dat de tabelvernieuwing gebruikmaakt van de beveiligingscontext van de gebruiker die de gerealiseerde weergave heeft gemaakt.
  • Query: Terwijl de meeste filters worden uitgevoerd met de rechten van de definieerer, zijn functies die gebruikerscontext controleren (zoals CURRENT_USER en IS_MEMBER) uitzonderingen. Deze functies worden uitgevoerd als de aanroeper. Deze aanpak dwingt gebruikersspecifieke gegevensbeveiliging en toegangsbeheer af op basis van de context van de huidige gebruiker.
  • Bij het maken van gerealiseerde weergaven over brontabellen die rijfilters en kolommaskers bevatten, is het vernieuwen van de gerealiseerde weergave altijd een volledige vernieuwing. Met een volledige vernieuwing worden alle gegevens die beschikbaar zijn in de bron, opnieuw verwerkt met de meest recente definities. Dit zorgt ervoor dat beveiligingsbeleid voor de brontabellen wordt geëvalueerd en toegepast met de meeste up-to-datumgegevens en -definities.

Waarneembaarheid

Gebruik DESCRIBE EXTENDED, INFORMATION_SCHEMAof De Catalogusverkenner om de bestaande rijfilters en kolommaskers te onderzoeken die van toepassing zijn op een bepaalde gerealiseerde weergave. Met deze functionaliteit kunnen gebruikers toegang tot gegevens en beveiligingsmaatregelen controleren en beoordelen voor gematerialiseerde weergaven.

Beperkingen

  • Wanneer in een gematerialiseerde weergave met een sum-aggregatie over een kolom die NULL-waarden kan bevatten de laatste niet-NULL-waarde uit die kolom wordt verwijderd - en er dus alleen NULL-waarden in die kolom overblijven - retourneert de resulterende aggregatiewaarde van de weergave nul in plaats van NULL.
  • Kolomverwijzing vereist geen alias. Voor niet-kolomverwijzingsexpressies is een alias vereist, zoals in het volgende voorbeeld:
    • Toegestaan: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Niet toegestaan: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL moet handmatig worden opgegeven om PRIMARY KEY een geldige instructie te kunnen zijn.
  • Gematerialiseerde weergaven bieden geen ondersteuning voor identiteitskolommen of surrogaatsleutels.
  • Gerealiseerde weergaven bieden geen ondersteuning voor OPTIMIZE en VACUUM opdrachten. Onderhoud gebeurt automatisch.
  • Gerealiseerde weergaven bieden geen ondersteuning voor verwachtingen om beperkingen voor gegevenskwaliteit te definiëren.

Voorbeelden

-- 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;