Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 ETL-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.
Gematerialiseerde weergaven kunnen alleen worden gemaakt met een Pro- of Serverless SQL Warehouse, of binnen een pipeline.
Notitie
Bewerkingen voor het maken en vernieuwen van gerealiseerde weergaven en streamingtabellen worden mogelijk gemaakt door serverloze Lakeflow-declaratieve pijplijnen. 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 ]
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 |
DEFAULT COLLATION UTF8_BINARY |
TBLPROPERTIES clause |
SCHEDULE [ REFRESH ] schedule_clause |
schedule |
WITH { ROW FILTER clause } } [...]
schedule
{ SCHEDULE [ REFRESH ] schedule_clause |
TRIGGER ON UPDATE [ AT MOST EVERY trigger_interval ] }
schedule_clause
{ EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
CRON cron_string [ AT TIME ZONE timezone_id ] }
Parameterwaarden
VERVANGEN
Indien opgegeven, vervangt het de weergave met inhoud als deze al bestaat.
ALS DEZE NIET BESTAAT
Maakt de weergave als deze niet bestaat. Als er al een weergave met deze naam bestaat, wordt de
CREATE MATERIALIZED VIEWinstructie genegeerd.U kunt maximaal één van
IF NOT EXISTSofOR 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
STRINGliteral die de kolom beschrijft. Deze optie moet gespecificeerd worden samen metcolumn_type. Als het kolomtype niet is opgegeven, wordt de kolomopmerking overgeslagen.column_constraint
Voegt een informatieve primaire sleutel of informatieve vreemde 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.
-
tabelbeperking
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 deelclausule 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 BYin plaats vanPARTITIONED BYvoor materialized views. -
Een optionele clausule om te clusteren op basis van een subset van kolommen. Gebruik automatische liquide clustering met
CLUSTER BY AUTOen Databricks kiest op intelligente wijze clusteringsleutels om de queryprestaties te optimaliseren. Zie Liquid Clustering gebruiken voor tabellen.Vloeibare clustering kan niet worden gecombineerd met
PARTITIONED BY. OPMERKING bekijk_opmerking
Een letterlijke
STRINGom de tabel te beschrijven.STANDAARD COLLATIE UTF8_BINARY
Van toepassing op:
Databricks
Databricks Runtime 17.1 en hogerHiermee wordt de standaardsortering van de gematerialiseerde weergave tot
UTF8_BINARYgedwongen. Deze component is verplicht als het schema waarin de weergave wordt gemaakt, een andere standaardsortering heeft danUTF8_BINARY. De standaardsortering van de gerealiseerde weergave wordt gebruikt als de standaardsortering in de hoofdtekst van de weergave.-
U kunt desgewenst een of meer door de gebruiker gedefinieerde eigenschappen instellen.
Gebruik deze instelling om het Lakeflow Declarative Pipelines Runtime-kanaal op te geven dat wordt gebruikt om deze instructie uit te voeren. Stel de waarde van de eigenschap
pipelines.channelin op"PREVIEW"of"CURRENT". De standaardwaarde is"CURRENT". Zie Lakeflow Declarative Pipelines-runtimekanalen voor meer informatie over Lakeflow Declarative Pipelines-kanalen. planning
De planning kan een
SCHEDULEinstructie of eenTRIGGERinstructie zijn.PLANNING [ REFRESH ] schema_clausule
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }Als u een vernieuwing wilt plannen die periodiek plaatsvindt, gebruikt u
EVERYsyntaxis. AlsEVERYsyntaxis is opgegeven, wordt de streamingtabel of gematerialiseerde weergave periodiek vernieuwd met het opgegeven interval op basis van de opgegeven waarde, zoalsHOUR,HOURS,DAY,DAYS,WEEKofWEEKS. De volgende tabel bevat geaccepteerde gehele getallen voornumber.Tijdeenheid Integerwaarde HOUR or HOURS1 <= H <= 72 DAY or DAYS1 <= D <= 31 WEEK or WEEKS1 <= 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 LOCALwordt niet ondersteund.Als
AT TIME ZONEafwezig is, wordt de sessietijdzone gebruikt. AlsAT TIME ZONEafwezig is en de sessietijdzone niet is ingesteld, wordt er een fout gegenereerd.SCHEDULEis semantisch gelijk aanSCHEDULE REFRESH.
TRIGGER ON UPDATE [ MAXIMAAL ELKE trigger_interval ]
Belangrijk
De
TRIGGER ON UPDATEfunctie bevindt zich in de bètaversie.U kunt de tabel desgewenst zo instellen dat deze wordt vernieuwd wanneer een upstream-gegevensbron wordt bijgewerkt, maximaal één keer per minuut. Stel een waarde in om
AT MOST EVERYminimaal een minimale tijd tussen vernieuwingen te vereisen.De upstream-gegevensbronnen moeten externe of beheerde Delta-tabellen zijn (inclusief gerealiseerde weergaven of streamingtabellen) of beheerde weergaven waarvan afhankelijkheden zijn beperkt tot ondersteunde tabeltypen.
Door bestandsevenementen in te schakelen, kunnen triggers beter presteren en worden enkele van de limieten voor triggerupdates verhoogd.
Dit
trigger_intervalis een INTERVAL-instructie die ten minste 1 minuut is.TRIGGER ON UPDATEheeft de volgende beperkingen- Niet meer dan 10 upstream-gegevensbronnen per gerealiseerde weergave met behulp van tabeltriggers.
- Maximaal 50 gerealiseerde weergaven of streamingtabellen met behulp van tabeltriggers (door bestandsgebeurtenissen in upstream-gegevensbronnen in te schakelen, wordt deze limiet verwijderd).
- Voor brongegevens in een externe Delta-tabel geldt een limiet van 10.000 rijen per wijzigingsset (het inschakelen van bestandsevenementen in upstream-gegevensbronnen verwijdert deze limiet).
- De
AT MOST EVERYcomponent is standaard ingesteld op 1 minuut en mag niet kleiner zijn dan 1 minuut.
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 de booleaanse waarde 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:
-
SELECTbevoegdheid voor de basistabellen waarnaar wordt verwezen door de MV. -
USE CATALOGbevoegdheid voor de bovenliggende catalogus enUSE SCHEMAbevoegdheid voor het bovenliggende schema. -
CREATE MATERIALIZED VIEWprivilege op het schema voor de MV.
Om een gebruiker de MV te kunnen laten vernieuwen, is het volgende vereist:
-
USE CATALOGbevoegdheid voor de bovenliggende catalogus enUSE SCHEMAbevoegdheid voor het bovenliggende schema. - Eigendom van de MV of
REFRESHbevoegdheid over de MV. - De eigenaar van de MV moet over het
SELECTprivilege 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 CATALOGbevoegdheid voor de bovenliggende catalogus enUSE SCHEMAbevoegdheid voor het bovenliggende schema. -
SELECTbevoegdheden 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 subsequente query's alleen de rijen teruggeven waarbij het filterpredicaat als waar wordt beoordeeld.
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 Rijfilters en kolommaskers voor 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 definitie: wanneer de
REFRESH MATERIALIZED VIEWinstructie 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_USERenIS_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 het veiligheidsbeleid voor de brontabellen wordt geëvalueerd en toegepast met de meest actuele gegevens 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 een gematerialiseerde weergave met een
sumaggregatie over een NULL-vatbare kolom de laatste niet-NULL-waarde uit die kolom verwijderd heeft - en dus alleenNULLwaarden in die kolom overblijven - geeft de resultante aggregatiewaarde van de gematerialiseerde 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 NULLmoet samen metPRIMARY KEYhandmatig worden opgegeven om een geldige instructie te vormen. - Gematerialiseerde weergaven bieden geen ondersteuning voor identiteitskolommen of surrogaatsleutels.
- Gematerialiseerde weergaven bieden geen ondersteuning voor
OPTIMIZEenVACUUMopdrachten. 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 whenever the
-- upstream data is updated
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
TRIGGER ON UPDATE
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;