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


CREATE MATERIALIZED VIEW (csővezetékek)

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. a materializált nézeteket egy "pipeline" támogatja. 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. A materializált nézeteket manuálisan vagy ütemezés szerint frissítheti.

A frissítések végrehajtásáról és ütemezéséről további információt a Folyamatfrissítés futtatása című témakörben talál.

Szemantika

CREATE [OR REFRESH] [PRIVATE] MATERIALIZED VIEW
  view_name
  [ column_list ]
  [ view_clauses ]
  AS query

column_list
   ( { column_name column_type column_properties } [, ...]
    [ column_constraint ] [, ...]
    [ , table_constraint ] [...] )

   column_properties
      { NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]

view_clauses
  { USING DELTA |
    PARTITIONED BY (col [, ...]) |
    CLUSTER BY clause |
    LOCATION path |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    WITH { ROW FILTER clause } } [...]

Paraméterek

  • REFRESH

    Ha meg van adva, létrehozza a nézetet, vagy frissít egy meglévő nézetet és annak tartalmát.

  • PRIVÁT

    Létrehoz egy privát materializált nézetet. A privát materializált nézet hasznos lehet köztes táblaként egy olyan folyamaton belül, amelyet nem szeretne közzétenni a katalógusban.

    • Ezek nem lettek hozzáadva a katalógushoz, és csak a definiáló folyamaton belül érhetők el
    • Ugyanazzal a névvel rendelkezhetnek, mint egy meglévő objektum a katalógusban. A folyamaton belül, ha egy privát materializált nézet és egy katalógusbeli objektum neve megegyezik, a névre mutató hivatkozások feloldódnak a privát materializált nézetre.
    • A privát materializált nézetek az adatfolyam teljes élettartama alatt megmaradnak, nem csak egyetlen frissítés során.

    A privát materializált nézetek korábban a paraméterrel TEMPORARY lettek létrehozva.

  • nézet_név

    Az újonnan létrehozott nézet neve. A teljes nézetnévnek egyedinek kell lennie.

    A privát materializált nézetek neve megegyezhet a katalógusban közzétett objektum nevével.

  • 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

      Kényszert ad hozzá, amely érvényesíti az adatokat, amint a táblába kerülnek. Lásd: Adatminőség kezelése folyamatelvárásokkal.

    • Maszk záradék

      Fontos

      Ez a funkció nyilvános előzetes verzióban van.

      Olyan oszlopmaszk funkciót ad hozzá, amely lehetővé teszi a bizalmas adatok anonimizálását. Lásd: Sorszűrők és oszlopmaszkok.

  • tábla_korlátozás

    Fontos

    Ez a funkció nyilvános előzetes verzióban van.

    Séma megadásakor megadhatja az elsődleges és az idegen kulcsokat. A korlátozások tájékoztató jellegűek, és nincsenek kényszerítve. Tekintse meg a CONSTRAINT záradékot az SQL nyelvi hivatkozásában.

    Megjegyzés:

    A táblakorlátozások meghatározásához a folyamatnak Unity Catalog-kompatibilis folyamatnak kell lennie.

  • view_clauses

    A materializált nézet particionálási, megjegyzési és felhasználó által definiált tulajdonságait is megadhatja. Minden al záradék csak egyszer adható meg.

    • A DELTA HASZNÁLATA

      Megadja az adatformátumot. Az egyetlen lehetőség a DELTA.

      Ez a záradék opcionális, és alapértelmezés szerint a DELTA értéket veszi fel.

    • PARTÍCIÓVAL

      A tábla particionálásához használandó egy vagy több oszlop választható listája. Kölcsönösen kizárja egymást a CLUSTER BY-vel.

      A folyékony klaszterezés rugalmas, optimalizált megoldást biztosít a csoportosításhoz. Fontolja meg a CLUSTER BY használatát PARTITIONED BY helyett a folyamatvezetékek számára.

    • CLUSTER BY

      Engedélyezze a "liquid clustering" funkciót a táblában, és határozza meg a fürtözési kulcsként használni kívánt oszlopokat. 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. Kölcsönösen kizárja egymást a PARTITIONED BY-vel.

      Lásd: Táblákhoz folyékony klaszterezés használata.

    • HELYSZÍN

      A táblaadatok opcionális tárolási helye. Ha nincs beállítva, a rendszer alapértelmezés szerint a folyamat tárolási helyére kerül.

      Ez a beállítás csak a Hive metaadattárban való közzétételkor érhető el. A Unity Catalogban a rendszer automatikusan kezeli a helyet.

    • MEGJEGYZÉS

      A táblázat opcionális leírása.

    • TBLPROPERTIES

      A tábla táblatulajdonságainak választható listája.

    • VAL ROW FILTER

    Fontos

    Ez a funkció nyilvános előzetes verzióban van.

    Sorszűrő függvényt ad hozzá a táblához. A tábla jövőbeli lekérdezései azoknak a soroknak a részhalmazát kapják meg, amelyekre a függvény IGAZ értéket ad. Ez a részletes hozzáférés-vezérléshez hasznos, mert lehetővé teszi, hogy a függvény megvizsgálja a behívó felhasználó identitását és csoporttagságát, hogy eldöntse, szűr-e bizonyos sorokat.

    Lásd ROW FILTER záradék.

  • query

    A tábla adatkészletét meghatározó lekérdezés.

Szükséges engedélyek

A folyamat futtató felhasználójának a következő engedélyekkel kell rendelkeznie:

  • SELECT jogosultság a materializált nézet á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 a materializált nézet sémájára.

Ahhoz, hogy a felhasználó frissíthesse azt a folyamatot, amelyen belül a materializált nézet van meghatározva, a következőkre van szüksége:

  • USE CATALOG jogosultsággal a szülőkatalóguson, valamint USE SCHEMA jogosultsággal a szülősémán.
  • A materializált nézet tulajdonjoga vagy REFRESH jogosultsága a materializált nézetre.
  • A materializált nézet tulajdonosának jogosultsággal kell rendelkeznie a SELECT materializált nézet által hivatkozott alaptáblák felett.

Ahhoz, hogy a felhasználó le tudja kérdezni az eredményként kapott materializált nézetet, 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.

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 tábla átnevezése vagy a tulajdonos megváltoztatása nem támogatott.
  • A létrehozott oszlopok, identitásoszlopok és alapértelmezett oszlopok nem támogatottak.

Példák

-- Create a materialized view by reading from an external data source, using the default schema:
CREATE OR REFRESH MATERIALIZED VIEW taxi_raw
AS SELECT * FROM read_files("/databricks-datasets/nyctaxi/sample/json/")

-- Create a materialized view by reading from a dataset defined in a pipeline:
CREATE OR REFRESH MATERIALIZED VIEW filtered_data
AS SELECT
  ...
FROM taxi_raw

-- Specify a schema and clustering columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) CLUSTER BY (order_day_of_week, customer_id)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify partition columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) PARTITIONED BY (order_day_of_week)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify a primary and foreign key constraint for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING NOT NULL PRIMARY KEY,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime)),
  CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES main.default.customers(customer_id)
)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify a row filter and mask clause for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales (
  customer_id STRING MASK catalog.schema.customer_id_mask_fn,
  customer_name STRING,
  number_of_line_items STRING COMMENT 'Number of items in the order',
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
)
COMMENT "Raw data on sales"
WITH ROW FILTER catalog.schema.order_number_filter_fn ON (order_number)
AS SELECT * FROM sales_bronze