CREATE MATERIALIZED VIEW
Van toepassing op: 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
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 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 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 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.
-
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.-
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. AlsEVERY
de syntaxis is opgegeven, wordt de streamingtabel of gerealiseerde weergave periodiek vernieuwd met het opgegeven interval op basis van de opgegeven waarde, zoalsHOUR
,HOURS
,DAY
,DAYS
, , ofWEEKS
WEEK
. 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 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
deze afwezig is en de sessietijdzone niet is ingesteld, wordt er een fout gegenereerd.SCHEDULE
is semantisch gelijk aanSCHEDULE 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.
-
-
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 deUSE 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 deUSE 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 deUSE 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.
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
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 meest recente gegevens en definities.
Waarneembaarheid
Gebruik DESCRIBE EXTENDED
, INFORMATION_SCHEMA
of 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 alleenNULL
waarden in die kolom blijven, retourneert de resulterende cumulatieve waarde van de gerealiseerde 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.- Gerealiseerde weergaven bieden geen ondersteuning voor identiteitskolommen of surrogaatsleutels.
- Gerealiseerde weergaven ondersteunen
OPTIMIZE
enVACUUM
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;