CREATE MATERIALIZED VIEW
Van toepassing op: 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
ofOR REPLACE
.-
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.
-
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 metcolumn_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.
-
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.
-
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 vanPARTITIONED BY
voor materialized views. -
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.-
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. AlsEVERY
syntaxis is opgegeven, wordt de streamingtabel of gematerialiseerde weergave periodiek vernieuwd met het opgegeven interval op basis van de opgegeven waarde, zoalsHOUR
,HOURS
,DAY
,DAYS
,WEEK
ofWEEKS
. De volgende tabel bevat geaccepteerde gehele getallen voornumber
.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. AlsAT TIME ZONE
afwezig is en de sessietijdzone niet is ingesteld, wordt er een fout gegenereerd.SCHEDULE
is semantisch gelijk aanSCHEDULE 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.
-
-
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 enUSE 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 enUSE 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 enUSE 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
enIS_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_SCHEMA
of 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 alleenNULL
-waarden in die kolom overblijven - retourneert de resulterende aggregatiewaarde van de weergave nul in plaats vanNULL
. - 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
- Toegestaan:
-
NOT NULL
moet handmatig worden opgegeven omPRIMARY KEY
een geldige instructie te kunnen zijn. - Gematerialiseerde weergaven bieden geen ondersteuning voor identiteitskolommen of surrogaatsleutels.
- Gerealiseerde weergaven bieden geen ondersteuning voor
OPTIMIZE
enVACUUM
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;