Megosztás a következőn keresztül:


CREATE MATERIALIZED VIEW

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet 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 VIEW utasítást.

    Legfeljebb az egyik megadottat választhatja: IF NOT EXISTS vagy OR REPLACE.

  • view_name

    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.

    • column_name

      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 STRING literál, amely az oszlopot írja le. Ezt a beállítást a beállítással column_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.

    • Maszk záradék

      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.

    • PARTICIONÁLT

      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 BY használatát a PARTITIONED BY helyett.

    • CLUSTER BY

      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 STRING jelző a táblázat leírásához.

    • ALAPÉRTELMEZETT RENDEZÉSI UTF8_BINARY

      A következőre vonatkozik:yes Databricks SQL check mark yes Databricks Runtime 17.1 és újabb

      A 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éssel UTF8_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.

    • TBLPROPERTIES

      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.channel tulajdonsá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 SCHEDULE vagy TRIGGER utasí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 EVERY szintaxist. Ha EVERY szintaxis 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ául HOUR, HOURS, DAY, DAYS, WEEKvagy WEEKS. Az alábbi táblázat a numberelfogadott egész számértékeket sorolja fel.

          Időegység Egész számérték
          HOUR or HOURS 1 <= H <= 72
          DAY or DAYS 1 <= D <= 31
          WEEK or WEEKS 1 <= 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 LOCAL nem támogatott.

          Ha AT TIME ZONE hiányzik, a munkamenet időzónája lesz használatban. Ha AT TIME ZONE hiányzik, és a munkamenet időzónája nincs beállítva, hibaüzenet jelenik meg. SCHEDULE szemantikailag egyenértékű a SCHEDULE REFRESH.

      • TRIGGER BEKAPCSOLVA UPDATE [ LEGFELJEBB MINDEN TRIGGER_INTERVAL ]

        Fontos

        A TRIGGER ON UPDATE funkció 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 UPDATE az 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 EVERY zá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.

  • AS-lekérdezés

    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:

  • SELECT jogosultság birtoklása az MV által hivatkozott alaptáblák felett.
  • USE CATALOG jogosultsággal a szülőkatalóguson, valamint USE SCHEMA jogosultsággal a szülősémán.
  • CREATE MATERIALIZED VIEW jogosultsá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 CATALOG jogosultsággal a szülőkatalóguson, valamint USE SCHEMA jogosultsággal a szülősémán.
  • Az MV tulajdonjoga vagy jogosultsága az MV-hez.
  • Az MV tulajdonosának SELECT jogosultsá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 CATALOG jogosultsággal a szülőkatalóguson, valamint USE SCHEMA jogosultsággal a szülősémán.
  • SELECT jogosultsá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 VIEW utasí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 és IS_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 sum agregá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 csak NULL értékek maradnak, akkor a materializált nézet összesített eredménye nullát ad vissza, nem pedig NULL.
  • 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
  • Ahhoz, hogy érvényes utasítást kapjunk, a(z) NOT NULL-t manuálisan meg kell adni a(z) PRIMARY KEY mellett.
  • 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 és VACUUM parancsokat. 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;