Delen via


CREATE MATERIALIZED VIEW

Van toepassing op: vinkje als ja aan Databricks SQL

Een gerealiseerde weergave is een weergave waarin vooraf samengestelde 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 gerealiseerde weergaven worden ondersteund door een DLT-pijplijn. U kunt gerealiseerde weergaven handmatig of volgens een schema vernieuwen.

Zie REFRESH (MATERIALIZED VIEW of STREAMING TABLE) voor meer informatie over het uitvoeren van een handmatige vernieuwing.

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

Notitie

Bewerkingen voor gerealiseerde weergaven en streamingtabellen worden mogelijk gemaakt en vernieuwd door een serverloze Delta Live Tables-pijplijn. 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 [, ...]) |
    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 moeten worden toegewezen aan 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 letterlijke STRING beschrijving van de kolomnaam. 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 refererende sleutelbeperking toe aan de tabel in een gerealiseerde 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 om de tabel te partitioneren op.

    • OPMERKING view_comment

      Een STRING letterlijke 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 pipelines.channel eigenschap in op "PREVIEW" of "CURRENT". De standaardwaarde is "CURRENT". Zie Delta Live Tables Runtime-kanalen voor meer informatie over Delta Live Tables-kanalen.

    • PLANNING [ VERNIEUWEN ] schedule_clause

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

        Belangrijk

        Deze functie is beschikbaar als openbare preview.

        Als u een vernieuwing wilt plannen die periodiek plaatsvindt, gebruikt EVERY u de syntaxis. Als EVERY de syntaxis is opgegeven, wordt de streamingtabel of gerealiseerde weergave periodiek vernieuwd met het opgegeven interval op basis van de opgegeven waarde, zoals HOUR, HOURS, DAY, DAYS, , of WEEKSWEEK. 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 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 deze afwezig is en de sessietijdzone niet is ingesteld, wordt er een fout gegenereerd. SCHEDULE is semantisch gelijk aan SCHEDULE REFRESH.

    • WITH ROW FILTER component

      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 bevoegdheden voor de bovenliggende catalogus en de USE SCHEMA bevoegdheid voor het bovenliggende schema.
  • CREATE MATERIALIZED VIEW bevoegdheid voor het schema voor de MV.

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

  • USE CATALOG bevoegdheden voor de bovenliggende catalogus en de USE SCHEMA bevoegdheid voor het bovenliggende schema.
  • Eigendom van de MV of REFRESH bevoegdheid op de MV.
  • De eigenaar van de MV moet de SELECT bevoegdheid hebben voor de basistabellen waarnaar wordt verwezen door de MV.

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

  • USE CATALOG bevoegdheden voor de bovenliggende catalogus en de 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 kolommaskers voor meer informatie over het gebruik van rijfilters en kolommaskers.

Rijfilters en kolommaskers beheren

Rijfilters en kolommaskers in gerealiseerde weergaven moeten worden toegevoegd via de CREATE instructie.

Gedrag

  • Vernieuwen als definitie: wanneer de REFRESH MATERIALIZED VIEW instructie een gerealiseerde weergave vernieuwt, worden rijfilterfuncties uitgevoerd met de rechten van de definieerer (als de eigenaar van de tabel). 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 meest recente gegevens en definities.

Waarneembaarheid

Gebruik DESCRIBE EXTENDED, INFORMATION_SCHEMAof catalogusverkenner om de bestaande rijfilters en kolommaskers te onderzoeken die van toepassing zijn op een bepaalde gerealiseerde weergave. Met deze functionaliteit kunnen gebruikers gegevenstoegang en beveiligingsmaatregelen controleren en controleren op gerealiseerde weergaven.

Beperkingen

  • Wanneer een gerealiseerde weergave met een sum aggregaties ten opzichte van een kolom met NULL de laatste niet-NULL-waarde uit die kolom heeft verwijderd, en dus alleen NULL waarden in die kolom blijven, retourneert de resulterende cumulatieve waarde van de gerealiseerde 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.
  • Gerealiseerde weergaven bieden geen ondersteuning voor identiteitskolommen of surrogaatsleutels.
  • Gerealiseerde weergaven ondersteunen OPTIMIZE en VACUUM opdrachten niet. 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 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;

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