Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:
Databricks SQL
A materializált nézet olyan nézet, ahol előre lefordított eredmények érhetők el a lekérdezéshez, és frissíthetők a bemenet változásainak megfelelően. Minden alkalommal, amikor egy materializált nézet frissül, a rendszer újraszámítja a lekérdezési eredményeket, hogy tükrözze a felsőbb rétegbeli adathalmazok változásait. Minden materializált nézetet egy ETL-eszközlánc támogat. A materializált nézeteket manuálisan vagy ütemezés szerint frissítheti.
Ha többet szeretne megtudni a manuális frissítés végrehajtásáról, tekintse meg REFRESH (MATERIALIZED VIEW vagy STREAMING TABLE).
A frissítés ütemezéséről további információt Példák vagy ALTER MATERIALIZED VIEWcímű témakörben talál.
A materializált nézetek csak Pro- vagy kiszolgáló nélküli SQL-raktárral vagy folyamaton belül hozhatók létre.
Feljegyzés
A materializált nézeteken és streamelési táblákon végzett létrehozási és frissítési műveleteket kiszolgáló nélküli Lakeflow Spark Deklaratív folyamatok hajtják végre. A Katalóguskezelővel megtekintheti a felhasználói felületen található háttérfolyamatok részleteit. Lásd Mi az a Katalóguskezelő?.
Szintaxis
{ 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 ] }
Paraméterek
HELYETTESÍT
Amennyiben meg van adva, kicseréli a nézetet és annak tartalmát, ha már létezik.
HA NEM LÉTEZIK
Létrehozza a nézetet, ha nem létezik. Ha már létezik ilyen nevű nézet, a rendszer figyelmen kívül hagyja az
CREATE MATERIALIZED VIEWutasítást.Legfeljebb az egyik megadottat választhatja:
IF NOT EXISTSvagyOR REPLACE.-
Az újonnan létrehozott nézet neve. A teljes nézetnévnek egyedinek kell lennie.
column_list
Igény szerint címkézheti a nézet lekérdezési eredményében szereplő oszlopokat. Ha oszloplistát ad meg, az oszlop aliasainak számának meg kell egyeznie a lekérdezésben szereplő kifejezések számával. Ha nincs megadva oszloplista, az aliasok a nézet törzséből származnak.
-
Az oszlopneveknek egyedinek kell lenniük, és le kell képezniük a lekérdezés kimeneti oszlopait.
oszlop_típus
Megadja az oszlop adattípusát. Az Azure Databricks által támogatott adattípusokat nem támogatják a materializált nézetek.
column_comment
Egy tetszőleges
STRINGliterál, amely az oszlopot írja le. Ezt a beállítást a beállítássalcolumn_typeegyütt kell megadni. Ha az oszloptípus nincs megadva, a program kihagyja az oszlop megjegyzését.column_constraint
Információs elsődleges kulcsot vagy információs idegenkulcs-korlátozást ad hozzá az oszlophoz egy materializált nézetben. Ha az oszloptípus nincs megadva, a program kihagyja az oszlopkorlátot.
-
Hozzáad egy oszlopmaszk-függvényt az érzékeny adatok anonimizálásához. Az oszlop minden további lekérdezése megkapja a függvény kiértékelésének eredményét az oszlopon az oszlop eredeti értéke helyett. Ez hasznos lehet részletes hozzáférés-vezérlési célokra, ahol a függvény megvizsgálhatja az invokáló felhasználó identitását vagy csoporttagságát annak megállapításához, hogy az értéket újra kívánja-e használni. Ha az oszloptípus nincs megadva, a program kihagyja az oszlopmaszkot.
-
tábla_korlátozás
Materializált nézetben egy információs elsődleges kulcsot vagy információs idegenkulcs-korlátozást ad hozzá a táblához. Ha az oszloptípus nincs megadva, a táblamegkötés kihagyva.
view_clauses
Opcionálisan megadhatja a particionálást, a megjegyzéseket, a felhasználó által definiált tulajdonságokat és az új materializált nézet frissítési ütemezését. Minden al záradék csak egyszer adható meg.
-
A tábla oszlopainak választható listája a tábla particionálásához.
Feljegyzés
A folyadék alapú klaszterezés rugalmas, optimalizált megoldást biztosít. Fontolja meg a materializált nézetekhez a
CLUSTER BYhasználatát aPARTITIONED BYhelyett. -
Opcionális feltétel az oszlopok egy részhalmaza alapján történő csoportosításhoz. Használjon automatikus folyékony fürtözést,
CLUSTER BY AUTOés a Databricks intelligensen választja ki a fürtözési kulcsokat a lekérdezési teljesítmény optimalizálásához. Lásd: Táblákhoz folyékony klaszterezés használata.A folyékony fürtözés nem kombinálható a következővel
PARTITIONED BY: . MEGJEGYZÉS megtekintés_megjegyzés
Egy
STRINGjelző a táblázat leírásához.ALAPÉRTELMEZETT RENDEZÉSI UTF8_BINARY
A következőre vonatkozik:
Databricks SQL
Databricks Runtime 17.1 és újabbA materializált nézet alapértelmezett rendezésének kényszerítése a következőre
UTF8_BINARY: . Ez a záradék kötelező, ha a nézetet létrehozó séma nem alapértelmezett rendezésselUTF8_BINARYrendelkezik. A rendszer a materializált nézet alapértelmezett rendezést használja a nézet törzsén belüli alapértelmezett rendezésként.-
Igény szerint beállíthat egy vagy több felhasználó által definiált tulajdonságot.
Ezzel a beállítással megadhatja az utasítás futtatásához használt Lakeflow Spark Deklaratív folyamatok futtatókörnyezeti csatornát. Állítsa a
pipelines.channeltulajdonság értékét"PREVIEW"vagy"CURRENT"értékre. Az alapértelmezett érték"CURRENT". További információ a Lakeflow Spark Deklaratív folyamatok csatornáiról: Lakeflow Spark Deklaratív folyamatok futtatókörnyezeti csatornái. menetrend
Az ütemezés lehet utasítás
SCHEDULEvagyTRIGGERutasítás.ÜTEMEZÉS [ REFRESH ] ütemezési_záradék
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }A rendszeres frissítés ütemezéséhez használja
EVERYszintaxist. HaEVERYszintaxis van megadva, a streamelési táblázat vagy a materializált nézet rendszeres időközönként frissül a megadott érték alapján, példáulHOUR,HOURS,DAY,DAYS,WEEKvagyWEEKS. Az alábbi táblázat anumberelfogadott egész számértékeket sorolja fel.Időegység Egész számérték HOUR or HOURS1 <= H <= 72 DAY or DAYS1 <= D <= 31 WEEK or WEEKS1 <= W <= 8 Feljegyzés
A belefoglalt időegység egyes és többes formái szemantikailag egyenértékűek.
CRON cron_string [ AT TIME ZONE timezone_id ]Frissítés ütemezése kvarc cron érték használatával. Az érvényes time_zone_values elfogadásra kerülnek.
AT TIME ZONE LOCALnem támogatott.Ha
AT TIME ZONEhiányzik, a munkamenet időzónája lesz használatban. HaAT TIME ZONEhiányzik, és a munkamenet időzónája nincs beállítva, hibaüzenet jelenik meg.SCHEDULEszemantikailag egyenértékű aSCHEDULE REFRESH.
TRIGGER BEKAPCSOLVA UPDATE [ LEGFELJEBB MINDEN TRIGGER_INTERVAL ]
Fontos
A
TRIGGER ON UPDATEfunkció bétaverzióban érhető el.Ha szeretné, állítsa a táblát frissítésre egy felsőbb rétegbeli adatforrás frissítésekor, legfeljebb percenként egyszer. Állítson be egy értéket
AT MOST EVERY, amely legalább egy minimális időt igényel a frissítések között.A felsőbb rétegbeli adatforrásoknak külső vagy felügyelt Delta-tábláknak kell lenniük (beleértve a materializált nézeteket vagy streamelő táblákat), vagy felügyelt nézeteknek, amelyek függőségei a támogatott táblatípusokra korlátozódnak.
A fájlesemények engedélyezésével az eseményindítók teljesítményesebbek lehetnek, és növelik a triggerfrissítések korlátait.
Az
trigger_intervalINTERVALLUM utasítás legalább 1 perc.TRIGGER ON UPDATEaz alábbi korlátozásokkal rendelkezik:- A TRIGGER ON UPDATEhasználatakor nem lehet több, mint 10 felsőbb rétegbeli adatforrás materializált nézetenként.
- A TRIGGER ON UPDATEhasználatával legfeljebb 1000 streamelési táblázat vagy materializált nézet adható meg.
- A
AT MOST EVERYzáradék alapértelmezés szerint 1 perc, és nem lehet kevesebb, mint 1 perc.
WITH ROW FILTER kifejezés
Sorszűrő függvényt ad hozzá a táblához. A tábla minden további lekérdezése megkapja azon sorok egy részhalmazát, amelyekhez a függvény igaz logikai értékre értékelődik ki. Ez hasznos lehet részletes hozzáférés-vezérlési célokra, ahol a függvény megvizsgálhatja a meghívást hívó felhasználó identitását vagy csoporttagságát annak megállapításához, hogy szűrjön-e bizonyos sorokat.
-
-
Olyan lekérdezés, amely alaptáblákból vagy más nézetekből hozza létre a nézetet.
Szükséges engedélyek
A materializált nézetet (MV) létrehozó felhasználó az MV tulajdonosa, és a következő engedélyekkel kell rendelkeznie:
-
SELECTjogosultság birtoklása az MV által hivatkozott alaptáblák felett. -
USE CATALOGjogosultsággal a szülőkatalóguson, valamintUSE SCHEMAjogosultsággal a szülősémán. -
CREATE MATERIALIZED VIEWjogosultság az MV séma számára.
Ahhoz, hogy a felhasználó frissíthesse az MV-t, a következőre van szüksége:
-
USE CATALOGjogosultsággal a szülőkatalóguson, valamintUSE SCHEMAjogosultsággal a szülősémán. - Az MV tulajdonjoga vagy jogosultsága az MV-hez.
- Az MV tulajdonosának
SELECTjogosultsággal kell rendelkeznie az MV által hivatkozott alaptáblák felett.
Ahhoz, hogy a felhasználó le tudja kérdezni az MV-t, a következőt kell megkövetelnie:
-
USE CATALOGjogosultsággal a szülőkatalóguson, valamintUSE SCHEMAjogosultsággal a szülősémán. -
SELECTjogosultságot a materializált nézet felett.
Sorszűrők és oszlopmaszkok
A sorszűrők lehetővé teszik egy olyan függvény megadását, amely szűrőként van alkalmazva, amikor egy táblavizsgálat sorokat olvas be. Ezek a szűrők biztosítják, hogy a későbbi lekérdezések csak olyan sorokat adjanak vissza, amelyek esetében a szűrő predikátum értéke igaz.
Az oszlopmaszkok lehetővé teszik az oszlopok értékeinek maszkolását, amikor egy táblázat beolvassa a sorokat. Az oszlopot érintő minden jövőbeli lekérdezés megkapja a függvény kiértékelésének eredményét az oszlopon, lecserélve az oszlop eredeti értékét.
További információ a sorszűrők és oszlopmaszkok használatáról: Sorszűrők és oszlopmaszkok.
Sorszűrők és oszlopmaszkok kezelése
A materializált nézetek sorszűrőit és oszlopmaszkjait a CREATE utasítással kell hozzáadni.
Működés
-
Frissítés definiálóként: Amikor az
REFRESH MATERIALIZED VIEWutasítás materializált nézetet frissít, a sorszűrő függvények a definiáló jogosultságaival (táblatulajdonosként) futnak. Ez azt jelenti, hogy a táblafrissítés a materializált nézetet létrehozó felhasználó biztonsági környezetét használja. -
Lekérdezés: Bár a legtöbb szűrő a definiáló jogosultságaival fut, a felhasználói környezetet ellenőrző függvények (például
CURRENT_USERésIS_MEMBER) kivételek. Ezek a függvények meghívóként futnak. Ez a megközelítés a felhasználóspecifikus adatbiztonságot és hozzáférés-vezérlést kényszeríti ki az aktuális felhasználó kontextusa alapján. - Amikor sorszűrőket és oszlopmaszkokat tartalmazó forrástáblákon hoz létre materializált nézeteket, a materializált nézet frissítése mindig teljes frissítés. A teljes frissítés a forrásban elérhető összes adatot a legújabb definíciókkal dolgozza fel újra. Ez biztosítja, hogy a forrástáblák biztonsági szabályzatai a leg up-to-date adatokkal és definíciókkal legyenek kiértékelve és alkalmazva.
Megfigyelhetőség
Az DESCRIBE EXTENDED, a INFORMATION_SCHEMAvagy a Katalóguskezelő használatával vizsgálja meg az adott materializált nézetre vonatkozó meglévő sorszűrőket és oszlopmaszkokat. Ez a funkció lehetővé teszi a felhasználók számára az adathozzáférési és védelmi intézkedések auditálását és felülvizsgálatát a materializált nézeteken.
Korlátozások
- Ha egy materializált nézet, amely
sumagregátumot tartalmaz egy NULL értékeket is megengedő oszlopban, eltávolítja az oszlopból az utolsó nem-null értéket, és így az oszlopban csakNULLértékek maradnak, akkor a materializált nézet összesített eredménye nullát ad vissza, nem pedigNULL. - Az oszlophivatkozás nem igényel aliast. A nem oszlopos hivatkozási kifejezésekhez alias szükséges, ahogyan az alábbi példában is látható:
- Megengedett:
SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1 - Tilos:
SELECT col1, SUM(col2) FROM t GROUP BY col1
- Megengedett:
- Ahhoz, hogy érvényes utasítást kapjunk, a(z)
NOT NULL-t manuálisan meg kell adni a(z)PRIMARY KEYmellett. - A materializált nézetek nem támogatják az identitásoszlopokat és a helyettesítő kulcsokat.
- A materializált nézetek nem támogatják
OPTIMIZEésVACUUMparancsokat. A karbantartás automatikusan történik. - A materializált nézetek nem támogatják az adatminőségi korlátozások meghatározására vonatkozó elvárásokat.
Példák
-- 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;