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


Materializált nézetek használata a Databricks SQL-ben

Fontos

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

Ez a cikk bemutatja, hogyan hozhat létre és használhat materializált nézeteket a Databricks SQL-ben a teljesítmény javítása és az adatfeldolgozási és elemzési számítási feladatok költségeinek csökkentése érdekében.

Mik azok a materializált nézetek?

A Databricks SQL-ben a materializált nézetek a Unity Catalog által felügyelt táblák, amelyek lehetővé teszik a felhasználók számára, hogy a forrástáblákban szereplő adatok legújabb verziója alapján előre lefordítsa az eredményeket. Az Azure Databricks materializált nézetei eltérnek a többi implementációtól, mivel a visszaadott eredmények az adatok állapotát tükrözik a materializált nézet legutóbbi frissítésekor, és nem mindig frissítik az eredményeket a materializált nézet lekérdezésekor. Manuálisan frissítheti a materializált nézeteket, vagy ütemezhet frissítéseket.

A materializált nézetek hatékonyak olyan adatfeldolgozási számítási feladatokhoz, mint a kinyerés, átalakítás és betöltés (ETL). A materializált nézetek egyszerű, deklaratív módon dolgozzák fel az adatokat a megfelelőség, a javítások, az összesítések vagy az általános változásadat-rögzítés (CDC) érdekében. A materializált nézetek csökkentik a költségeket és javítják a lekérdezések késését a lassú lekérdezések és a gyakran használt számítások előzetes számításával. A materializált nézetek az alaptáblák tisztításával, bővítésével és denormalizálásával könnyen használható átalakításokat is lehetővé tesznek. A materializált nézetek csökkenthetik a költségeket, miközben egyszerűsített végfelhasználói élményt nyújtanak, mert bizonyos esetekben növekményesen kiszámíthatják az alaptáblák változásait.

A materializált nézeteket először a Databricks Adatintelligencia-platformon támogatták a Delta Live Tables elindításával. Amikor materializált nézetet hoz létre egy Databricks SQL Warehouse-ban, létrejön egy Delta Live Tables-folyamat a materializált nézet frissítéseinek feldolgozásához. A frissítési műveletek állapotát a Delta Live Tables felhasználói felületén, a Delta Live Tables API-ban vagy a Delta Live Tables parancssori felületén figyelheti. Tekintse meg a materializált nézetfrissítések állapotának megtekintése című témakört.

Követelmények

  • A materializált nézetek létrehozásához és frissítéséhez unitykatalógus-kompatibilis Databricks SQL Warehouse-t kell használnia.

  • A munkaterületnek olyan régióban kell lennie, amely támogatja a kiszolgáló nélküli SQL-raktárakat.

A Databricks SQL-sel materializált nézetek használatakor a korlátozásokról további információt a Korlátozások című témakörben talál.

Materializált nézet létrehozása

Materializált nézet létrehozásához használja az utasítást CREATE MATERIALIZED VIEW . Lásd: CREATE MATERIALIZED VIEW in the Databricks SQL reference. Létrehozási utasítás elküldéséhez használja az SQL-szerkesztőt az Azure Databricks felhasználói felületén, a Databricks SQL CLI-ben vagy a Databricks SQL API-ban.

Feljegyzés

A materializált nézetet létrehozó felhasználó a materializált nézet tulajdonosa, és a következő engedélyekkel kell rendelkeznie:

  • SELECT jogosultság a materializált nézet által hivatkozott alaptáblákon.
  • USE CATALOG és USE SCHEMA a katalógus és a séma jogosultságai, amelyek tartalmazzák a materializált nézet forrástábláit.
  • USE CATALOG és USE SCHEMA jogosultságokat a materializált nézet célkatalógusában és sémáján.
  • CREATE TABLE és CREATE MATERIALIZED VIEW jogosultságokat a materializált nézetet tartalmazó sémán.

Az alábbi példa létrehozza a materializált nézetet mv1 az alaptáblából base_table1:

CREATE MATERIALIZED VIEW mv1
AS SELECT
  date, sum(sales) AS sum_of_sales
FROM
  table1
GROUP BY
  date;

Hogyan jönnek létre a materializált nézetek?

A Databricks SQL materializált nézetműveletei CREATE databricks SQL-raktárral hoznak létre és töltenek be adatokat a materializált nézetben. Mivel a materializált nézet létrehozása szinkron művelet a Databricks SQL Warehouse-ban, a CREATE MATERIALIZED VIEW parancs blokkolja a materializált nézet létrehozását és a kezdeti adatbetöltés befejezését. A Delta Live Tables-folyamat automatikusan létrejön minden Databricks SQL-materializált nézethez. A materializált nézet frissítésekor a Delta Live Tables folyamat frissítése megkezdi a frissítés feldolgozását.

Adatok betöltése külső rendszerekből

A Databricks azt javasolja, hogy a Támogatott adatforrások esetében a Lakehouse Federation használatával töltsön be külső adatokat. A Lakehouse Federation által nem támogatott forrásokból származó adatok betöltéséről további információt az Adatformátum beállításai című témakörben talál.

Materializált nézet frissítése

A REFRESH művelet frissíti a materializált nézetet, hogy tükrözze az alaptábla legújabb módosításait. A materializált nézet frissítéséhez használja az utasítást REFRESH MATERIALIZED VIEW . A Databricks SQL-referencia tartalmazza a REFRESH (MATERIALIZED VIEW and STREAMING TABLE) (MATERIALIZED VIEW and STREAMING TABLE) című témakört. Frissítési utasítás elküldéséhez használja az SQL-szerkesztőt az Azure Databricks felhasználói felületén, a Databricks SQL CLI-ben vagy a Databricks SQL API-ban.

Csak a tulajdonos használhatja REFRESH a materializált nézetet.

Az alábbi példa frissíti a mv1 materializált nézetet:

REFRESH MATERIALIZED VIEW mv1;

Hogyan frissülnek a Databricks SQL materializált nézetei?

A materializált nézetek automatikusan létrehoznak és használnak Delta Live Tables-folyamatokat a frissítési műveletek feldolgozásához. Mivel a frissítést egy Delta Live Tables-folyamat felügyeli, a materializált nézet létrehozásához használt Databricks SQL Warehouse nem használatos, és nem kell futnia a frissítési művelet során.

A Delta Live Tables-folyamatok folyamatos vagy aktivált végrehajtási módot használnak. A materializált nézetek bármelyik végrehajtási módban frissíthetők. A folyamatos végrehajtási módban történő működés szükségtelen feldolgozásának elkerülése érdekében a folyamatok automatikusan figyelik a függő Delta-táblákat, és csak akkor hajtanak végre frissítést, ha a függő táblák tartalma módosult. Lásd : Mi az a Delta Live Tables-folyamat?.

Feljegyzés

A Delta Live Tables futtatókörnyezete nem észleli a nem Delta-adatforrások változásait. A táblázat továbbra is rendszeresen frissül, de magasabb alapértelmezett triggerintervallummal, hogy megakadályozza, hogy a túlzott újraszámítás lelassítsa a számítás növekményes feldolgozását.

Alapértelmezés szerint a frissítési műveletek szinkron módon lesznek végrehajtva. A frissítési műveletet aszinkron módon is beállíthatja. Az egyes megközelítésekhez társított viselkedés a következő:

  • Szinkron: A szinkron frissítés blokkolja a többi műveletet, amíg a frissítési művelet be nem fejeződik. Ez lehetővé teszi a frissítési műveletek vezénylési eszközökben, például munkafolyamatokban való sorrendjét. A materializált nézetek munkafolyamatokkal való vezényléséhez használja az SQL-feladattípust . Lásd : Bevezetés az Azure Databricks-munkafolyamatok használatába.
  • Aszinkron: Az aszinkron frissítés elindít egy háttérfeladatot a Delta Live Tables számításában, amikor egy materializált nézet frissítése megkezdődik, és a parancs az adatbetöltés befejezése előtt visszatér. Mivel egy Delta Live Tables-folyamat kezeli a frissítést, a materializált nézet létrehozásához használt Databricks SQL Warehouse nem lesz használatban. A frissítési művelet során nem kell futnia.

Egyes lekérdezések növekményesen frissíthetők. A materializált nézetek frissítési műveleteit lásd. Ha növekményes frissítés nem hajtható végre, a rendszer ehelyett teljes frissítést hajt végre.

Materializált nézetfrissítések ütemezése

A Databricks SQL materializált nézetét konfigurálhatja úgy, hogy egy meghatározott ütemezés alapján automatikusan frissüljön. Konfigurálja ezt az ütemezést a SCHEDULE záradékkal, amikor létrehozza a materializált nézetet, vagy hozzáad egy ütemezést az ALTER VIEW utasítással. Ütemezés létrehozásakor a rendszer automatikusan konfigurál egy új Databricks-feladatot a frissítés feldolgozására. Az ütemezést az utasítással DESCRIBE EXTENDED bármikor megtekintheti.

Materializált nézet definíciójának frissítése

A materializált nézet definíciójának frissítéséhez először le kell dobnia, majd újra létre kell hoznia a materializált nézetet.

Materializált nézet elvetése

Feljegyzés

A materializált nézet elvetésére vonatkozó parancs elküldéséhez a materializált nézet tulajdonosának kell lennie.

Materializált nézet elvetéséhez használja a DROP VIEW utasítást. Az utasítás elküldéséhez DROP használhatja az SQL-szerkesztőt az Azure Databricks felhasználói felületén, a Databricks SQL CLI-ben vagy a Databricks SQL API-ban. Az alábbi példa elveti a mv1 materializált nézetet:

DROP MATERIALIZED VIEW mv1;

Materializált nézet leírása

A materializált nézet oszlopainak és adattípusainak lekéréséhez használja az utasítást DESCRIBE . A materializált nézet oszlopainak, adattípusainak és metaadatainak(például tulajdonosának, helyének, létrehozási idejének és frissítési állapotának) lekéréséhez használja a következőt DESCRIBE EXTENDED: Utasítás elküldéséhez DESCRIBE használja az SQL-szerkesztőt az Azure Databricks felhasználói felületén, a Databricks SQL CLI-ben vagy a Databricks SQL API-ban.

Materializált nézetfrissítés állapotának megtekintése

Feljegyzés

Mivel a Delta Live Tables-folyamat kezeli a materializált nézetfrissítéseket, a folyamat indítási ideje késéssel jár. Ez az idő a frissítés végrehajtásához szükséges idő mellett másodpercek és percek között is lehet.

A materializált nézet frissítésének állapotát a Materialized nézetet kezelő folyamat megtekintésével tekintheti meg a Delta Live Tables felhasználói felületén, vagy megtekintheti a DESCRIBE EXTENDED materializált nézet parancsa által visszaadott frissítési információkat.

A materializált nézet frissítési előzményeit a Delta Live Tables eseménynaplójának lekérdezésével is megtekintheti. Tekintse meg a materializált nézet frissítési előzményeinek megtekintése című témakört.

A frissítési állapot megtekintése a Delta Live Tables felhasználói felületén

Alapértelmezés szerint a materializált nézetet kezelő Delta Live Tables-folyamat nem látható a Delta Live Tables felhasználói felületén. Ha meg szeretné tekinteni a folyamatot a Delta Live Tables felhasználói felületén, közvetlenül hozzá kell férnie a folyamat Folyamat részletei lapjára mutató hivatkozáshoz. A hivatkozás eléréséhez:

  • Ha a parancsot az REFRESH SQL-szerkesztőben küldi el, kövesse az Eredmények panelen található hivatkozást.
  • Kövesse az utasítás által visszaadott DESCRIBE EXTENDED hivatkozást.
  • A materializált nézet leállás lapján kattintson a Folyamatok elemre, majd a folyamat hivatkozására.

Aktív frissítés leállítása

Ha le szeretne állítani egy aktív frissítést a Delta Live Tables felhasználói felületén, a Folyamat részletei lapon kattintson a Leállítás gombra a folyamatfrissítés leállításához. A frissítést a Databricks parancssori felületével vagy a POST /api/2.0/pipelines/{pipeline_id}/stop művelettel is leállíthatja a Pipelines API-ban.

Materializált nézet tulajdonosának módosítása

Ha metaadattár-rendszergazda és munkaterület-rendszergazda is, módosíthatja a materializált nézet tulajdonosát. A materializált nézetek automatikusan létrehoznak és használnak Delta Live Tables-folyamatokat a módosítások feldolgozásához. A materializált nézetek tulajdonosának módosításához kövesse az alábbi lépéseket:

  • Kattintson Feladatok ikon a Munkafolyamatok elemre, majd a Delta Live Tables fülre .
  • Kattintson annak a folyamatnak a nevére, amelynek a tulajdonosát módosítani szeretné.
  • Kattintson a Kebab menüfolyamatnév jobb oldalán található kebab menüre, majd az Engedélyek parancsra. Ekkor megnyílik az engedélyek párbeszédpanelje.
  • Kattintson az aktuális tulajdonos nevének jobb oldalán található x gombra az aktuális tulajdonos eltávolításához.
  • Kezdjen el gépelni az elérhető felhasználók listájának szűréséhez. Kattintson arra a felhasználóra, akinek az új folyamattulajdonosnak kell lennie.
  • A módosítások mentéséhez és a párbeszédpanel bezárásához kattintson a Mentés gombra.

A folyamat összes objektuma, beleértve a folyamatban definiált materializált nézeteket is, az új folyamattulajdonos tulajdonában van. Minden jövőbeli frissítés az új tulajdonos identitásával fut.

A materializált nézetekhez való hozzáférés szabályozása

A materializált nézetek a gazdag hozzáférés-vezérlést támogatják az adatmegosztás támogatásához, miközben elkerülik a potenciálisan privát adatok felfedését. A materializált nézet tulajdonosa jogosultságokat adhat SELECT más felhasználóknak. A materializált nézethez hozzáféréssel rendelkező SELECT felhasználóknak nem kell SELECT hozzáférni a materializált nézet által hivatkozott táblákhoz. Ez a hozzáférés-vezérlés lehetővé teszi az adatmegosztást a mögöttes adatokhoz való hozzáférés szabályozása közben.

Jogosultságok megadása materializált nézethez

A materializált nézethez való hozzáférés biztosításához használja a következő utasítást GRANT :

GRANT
  privilege_type [, privilege_type ] ...
  ON <mv_name> TO principal;

A privilege_type a következő lehet:

  • SELECT - a felhasználó képes SELECT a materializált nézetre.
  • REFRESH - a felhasználó képes REFRESH a materializált nézetre. A frissítések a tulajdonos engedélyeinek használatával futnak.

Az alábbi példa egy materializált nézetet hoz létre, és kijelölési és frissítési jogosultságokat ad egy felhasználónak:

CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;

Jogosultságok visszavonása materializált nézetből

A materializált nézethez való hozzáférés visszavonásához használja a következő utasítást REVOKE :

REVOKE
  privilege_type [, privilege_type ]
  ON <name> FROM principal;

Ha SELECT az alaptáblán lévő jogosultságokat visszavonják a materializált nézet tulajdonosától vagy bármely más felhasználótól, aki jogosultságokat kapott SELECT a materializált nézethez, vagy az alaptáblát elveti, a materializált nézet tulajdonosa vagy a hozzáféréssel rendelkező felhasználó továbbra is le tudja kérdezni a materializált nézetet. A következő viselkedés azonban előfordul:

  • A materializált nézet tulajdonosa vagy azok, akik elveszítették a hozzáférést egy materializált nézethez, már REFRESH nem használhatják a materializált nézetet, és a materializált nézet elavulttá válik.
  • Ha ütemezéssel automatizálja, a következő ütemezett feladat REFRESH meghiúsul vagy nem fut.

Az alábbi példa visszavonja a jogosultságot:SELECT mv1

REVOKE SELECT ON mv1 FROM user1;

Változásadatcsatorna engedélyezése

Az adatcsatorna módosítása szükséges a materializált nézetek alaptábláiban, kivéve bizonyos speciális használati eseteket. Az adatcsatorna alaptáblán való módosításának engedélyezéséhez állítsa be a delta.enableChangeDataFeed táblatulajdonságot a következő szintaxissal:

ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

A materializált nézet frissítési előzményeinek megtekintése

Ha materializált nézetben szeretné megtekinteni a műveletek állapotát REFRESH , beleértve az aktuális és a korábbi frissítéseket, kérdezze le a Delta Live Tables eseménynaplóját:

SELECT
  *
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = "update_progress"
ORDER BY
  timestamp desc;

Cserélje le <fully-qualified-table-name> a materializált nézet teljes nevét, beleértve a katalógust és a sémát is.

Lásd: Mi a Delta Live Tables eseménynaplója?

Növekményes vagy teljes frissítés alkalmazásának meghatározása

A materializált nézetfrissítések teljesítményének optimalizálásához az Azure Databricks költségmodellt használ a frissítéshez használt technika kiválasztásához. Az alábbi táblázat a következő technikákat ismerteti:

Módszer Növekményes frissítés? Leírás
FULL_RECOMPUTE Nem A materializált nézet teljesen újrafordítva lett
NO_OP Nem alkalmazható A materializált nézet nem frissült, mert a rendszer nem észlelt módosításokat az alaptáblában.
ROW_BASED vagy PARTITION_OVERWRITE Igen A materializált nézet növekményesen frissült a megadott technikával.

A használt technika meghatározásához kérdezze le a Delta Live Tables eseménynaplóját, ahol a event_type következő:planning_information

SELECT
  timestamp,
  message
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = 'planning_information'
ORDER BY
  timestamp desc;

Cserélje le <fully-qualified-table-name> a materializált nézet teljes nevét, beleértve a katalógust és a sémát is.

Lásd: Mi a Delta Live Tables eseménynaplója?

Korlátozások

  • Az MV-k kezelésének és lekérdezhető helyének korlátozására van szükség:

    • A Databricks SQL materializált nézetei csak pro SQL-raktárakban és kiszolgáló nélküli SQL-raktárakban hozhatók létre és frissíthetők.
    • A Databricks SQL materializált nézetei csak az azt létrehozó munkaterületről frissíthetők.
    • A Databricks SQL materializált nézet tulajdonosa lekérdezheti a materializált nézetet egyetlen felhasználói hozzáférési módú fürtből. Ellenkező esetben a Databricks SQL materializált nézetei csak a Databricks SQL-raktárakból, a Delta Live Tablesből és a Databricks Runtime 11.3-at vagy újabb verziót futtató megosztott fürtökből kérdezhetők le.
  • A materializált nézetek nem támogatják az identitásoszlopokat és a helyettesítő kulcsokat.

  • Ha egy materializált nézet összegösszesítést használ egy NULL-able oszlopon keresztül, és csak NULL az értékek maradnak az oszlopban, akkor a materializált nézetek eredményül kapott összesített értéke nulla helyett NULL.

  • A változásadatcsatorna nem olvasható materializált nézetben.

  • A materializált nézeteket támogató mögöttes fájlok tartalmazhatnak olyan felsőbb rétegbeli táblákból származó adatokat (beleértve a személyazonosításra alkalmas adatokat is), amelyek nem jelennek meg a materializált nézetdefinícióban. Ezeket az adatokat a rendszer automatikusan hozzáadja a mögöttes tárolóhoz, hogy támogassa a materializált nézetek növekményes frissítését. Mivel a materializált nézet alapjául szolgáló fájlok a materializált nézet sémájának nem részét képező felsőbb rétegbeli táblákból származó adatok feltárását kockáztathatják, a Databricks azt javasolja, hogy ne ossza meg az alapul szolgáló tárolót a nem megbízható alsóbb rétegbeli felhasználókkal. Tegyük fel például, hogy egy materializált nézet definíciója tartalmaz egy záradékot COUNT(DISTINCT field_a) . Annak ellenére, hogy a materializált nézetdefiníció csak az összesítő záradékot COUNT DISTINCT tartalmazza, a mögöttes fájlok tartalmazzák a tényleges értékek field_alistáját.

  • A Databricks SQL materializált nézetei nem támogatottak az USA déli középső régiójában és az USA 2. nyugati régiójában.