CREATE MATERIALIZED VIEW
Gäller för: Databricks SQL
En materialiserad vy är en vy där förberäknade resultat är tillgängliga för frågor och kan uppdateras för att återspegla ändringar i indata. Varje gång en materialiserad vy uppdateras beräknas frågeresultaten om för att återspegla ändringar i överordnade datamängder. Alla materialiserade vyer stöds av en DLT-pipeline. Du kan uppdatera materialiserade vyer manuellt eller enligt ett schema.
Mer information om hur du utför en manuell uppdatering finns i REFRESH (MATERIALIZED VIEW eller STREAMING TABLE).
Mer information om hur du schemalägger en uppdatering finns i Exempel eller ALTER MATERIALIZED VIEW.
Materialiserade vyer kan bara skapas med hjälp av ett Pro- eller Serverlöst SQL-lager eller i en Delta Live Tables-pipeline.
Kommentar
Skapa och uppdatera åtgärder för materialiserade vyer och strömmande tabeller drivs av en serverlös Delta Live Tables-pipeline. Du kan använda Catalog Explorer för att visa detaljer om de underliggande pipelines i användargränssnittet. Se Vad är Katalogutforskaren?.
Syntax
{ 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 ] }
Parametrar
ERSÄTTA
Om det anges ersätter du vyn och dess innehåll om det redan finns.
OM INTE FINNS
Skapar vyn om den inte finns. Om det redan finns en vy med det här namnet ignoreras -instruktionen
CREATE MATERIALIZED VIEW
.Du kan ange högst en av
IF NOT EXISTS
ellerOR REPLACE
.-
Namnet på den nyligen skapade vyn. Det fullständigt kvalificerade vynamnet måste vara unikt.
column_list
Du kan också etikettera kolumnerna i frågeresultatet i vyn. Om du anger en kolumnlista måste antalet kolumnalias matcha antalet uttryck i frågan. Om ingen kolumnlista anges härleds alias från brödtexten i vyn.
-
Kolumnnamnen måste vara unika och mappas till frågans utdatakolumner.
column_type
Anger kolumnens datatyp. Alla datatyper som stöds av Azure Databricks stöds inte av materialiserade vyer.
column_comment
En valfri
STRING
-literal som beskriver kolumnen. Det här alternativet måste anges tillsammans medcolumn_type
. Om kolumntypen inte har angetts hoppas kolumnkommenteringen över.column_constraint
Lägger till en informationsprimärnyckel eller informationsutländsk nyckelbegränsning till en kolumn i en materialiserad vy. Om kolumntypen inte har angetts utelämnas kolumnbegränsningen.
-
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Lägger till en kolumnmaskfunktion för att anonymisera känsliga data. Alla efterföljande frågor från den kolumnen får resultatet av utvärderingen av funktionen över kolumnen i stället för kolumnens ursprungliga värde. Detta kan vara användbart för detaljerad åtkomstkontroll där funktionen kan kontrollera identitets- eller gruppmedlemskapen för den anropande användaren för att avgöra om värdet ska redigeras. Om kolumntypen inte har angetts utelämnas kolumnmasken.
-
table_constraint
Lägger till en primär nyckel eller informationsbaserad främmande nyckelbegränsning i tabellen i en materialiserad vy. Om kolumntypen inte har angetts hoppar systemet över tabellbegränsningen.
view_clauses
Du kan också ange partitionering, kommentarer, användardefinierade egenskaper och ett uppdateringsschema för den nya materialiserade vyn. Varje undersats kan bara anges en gång.
-
En valfri lista över kolumner i tabellen som tabellen ska partitioneras efter.
KOMMENTAR view_comment
En
STRING
literal som beskriver tabellen.-
Du kan också ange en eller flera användardefinierade egenskaper.
Använd den här inställningen om du vill ange den Delta Live Tables-körningskanal som används för att köra den här instruktionen. Ange värdet för egenskapen
pipelines.channel
till"PREVIEW"
eller"CURRENT"
. Standardvärdet är"CURRENT"
. Mer information om Delta Live Tables-kanaler finns i Delta Live Tables-körningskanaler. SCHEMA [ REFRESH ] schema_klausul
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }
Om du vill schemalägga en uppdatering som sker regelbundet använder du
EVERY
syntax. OmEVERY
syntax anges uppdateras strömningstabellen eller den materialiserade vyn regelbundet med det angivna intervallet baserat på det angivna värdet, till exempelHOUR
,HOURS
,DAY
,DAYS
,WEEK
ellerWEEKS
. I följande tabell visas godkända heltalsvärden förnumber
.Time unit Heltalsvärde HOUR or HOURS
1 <= H <= 72 DAY or DAYS
1 <= D <= 31 WEEK or WEEKS
1 <= W <= 8 Kommentar
Singular- och pluralformerna i den inkluderade tidsenheten är semantiskt likvärdiga.
CRON cron_string [ AT TIME ZONE timezone_id ]
Så här schemalägger du en uppdatering med hjälp av ett Quartz cronvärde . Giltiga time_zone_values accepteras.
AT TIME ZONE LOCAL
stöds inte.Om
AT TIME ZONE
den saknas används tidszonen för sessionen. OmAT TIME ZONE
saknas och sessionens tidszon inte har angetts utlöses ett fel.SCHEDULE
är semantiskt likvärdigt medSCHEDULE REFRESH
.
WITH ROW FILTER-sats
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Lägger till en radfilterfunktion i tabellen. Alla efterföljande frågor från tabellen tar emot en delmängd av de rader som funktionen utvärderar till boolesk TRUE. Detta kan vara användbart för detaljerad åtkomstkontroll där funktionen kan inspektera identitets- eller gruppmedlemskap för den anropande användaren för att avgöra om vissa rader ska filtreras.
-
-
En databasfråga som konstruerar vyn från bastabeller eller andra vyer.
Behörigheter som krävs
Användaren som skapar en materialiserad vy (MV) är MV-ägare och måste ha följande behörigheter:
-
SELECT
behörighet över de bastabeller som refereras av MV. -
USE CATALOG
behörighet i den överordnade katalogen ochUSE SCHEMA
behörighet i det överordnade schemat. -
CREATE MATERIALIZED VIEW
behörighet för schemat för MV.
För att en användare ska kunna uppdatera MV:en behöver de:
-
USE CATALOG
behörighet i den överordnade katalogen ochUSE SCHEMA
behörighet i det överordnade schemat. - Ägarskap för MV eller
REFRESH
behörighet på MV. - Ägaren av MV måste ha
SELECT
-behörighet över bastabellerna som refereras av MV.
För att en användare ska kunna köra frågor mot MV:en behöver de:
-
USE CATALOG
behörighet i den överordnade katalogen ochUSE SCHEMA
behörighet i det överordnade schemat. -
SELECT
behörighet över den materialiserade vyn.
Radfilter och kolumnmasker
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Med radfilter kan du ange en funktion som tillämpas som ett filter när en tabellgenomsökning hämtar rader. Dessa filter säkerställer att efterföljande frågor endast returnerar rader som filterpredikatet utvärderas till sant för.
Med kolumnmasker kan du maskera en kolumns värden när en tabellgenomsökning hämtar rader. Alla framtida frågor som rör den kolumnen får resultatet av utvärderingen av funktionen över kolumnen och ersätter kolumnens ursprungliga värde.
Mer information om hur du använder radfilter och kolumnmasker finns i Filtrera känsliga tabelldata med hjälp av radfilter och kolumnmasker.
Hantera radfilter och kolumnmasker
Radfilter och kolumnmasker i materialiserade vyer bör läggas till via CREATE
-instruktionen.
Funktionssätt
-
Refresh as Definer: När
REFRESH MATERIALIZED VIEW
-instruktionen uppdaterar en materialiserad vy körs radfilterfunktionerna med definierarens rättigheter (som tabellägare). Det innebär att tabelluppdateringen använder säkerhetskontexten för användaren som skapade den materialiserade vyn. -
Fråga: De flesta filter körs med definierarens rättigheter, men funktioner som kontrollerar användarkontexten (till exempel
CURRENT_USER
ochIS_MEMBER
) är undantag. Dessa funktioner körs som anropare. Den här metoden tillämpar användarspecifika datasäkerhets- och åtkomstkontroller baserat på den aktuella användarens kontext. - När du skapar materialiserade vyer över källtabeller som innehåller radfilter och kolumnmasker är uppdateringen av den materialiserade vyn alltid en fullständig uppdatering. En fullständig uppdatering ombearbetar alla data som är tillgängliga i källan med de senaste definitionerna. Detta säkerställer att säkerhetsprinciperna i källtabellerna utvärderas och tillämpas med de mest up-todatumdata och definitioner.
Överskådlighet
Använd DESCRIBE EXTENDED
, INFORMATION_SCHEMA
eller Katalogutforskaren för att undersöka befintliga radfilter och kolumnmasker som gäller för en viss materialiserad vy. Med den här funktionen kan användare granska och utvärdera dataåtkomst- och skyddsåtgärder för materialiserade vyer.
Begränsningar
- När en materialiserad vy med en
sum
aggregering över en NULL-kapabel kolumn har det sista icke-NULL-värdet borttaget från den kolumnen – och därmed baraNULL
värden finns kvar i kolumnen – returnerar den materialiserade vyns resulterande aggregeringsvärde noll i stället förNULL
. - Kolumnreferens kräver inget alias. Referensuttryck som inte är kolumner kräver ett alias, som i följande exempel:
- Tillåten:
SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
- Tillåts inte:
SELECT col1, SUM(col2) FROM t GROUP BY col1
- Tillåten:
-
NOT NULL
måste anges manuellt tillsammans medPRIMARY KEY
för att vara en giltig instruktion. - Materialiserade vyer stöder inte identitetskolumner eller surrogatnycklar.
- Materialiserade vyer stöder inte kommandon för
OPTIMIZE
ochVACUUM
. Underhåll sker automatiskt. - Materialiserade vyer har inte stöd för förväntningar på att definiera datakvalitetsbegränsningar.
Exempel
-- 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;