Materializált nézetek használata a Databricks SQL-ben
Feljegyzés
Ha Azure Private Link-kapcsolatot kell használnia a materializált nézettel, forduljon a Databricks képviselőjéhez.
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 az Azure Databricksben támogatták a Delta Live Tables elindításával. Amikor materializált nézetet hoz létre egy Databricks SQL Warehouse-ban, a rendszer kiszolgáló nélküli folyamatot hoz létre 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 vagy a pipelines API-ban figyelheti. Tekintse meg a materializált nézetfrissítések állapotának megtekintése című témakört.
Követelmények
Materializált nézetek létrehozása vagy frissítése:
Unity Catalog-kompatibilis pro- vagy kiszolgáló nélküli SQL-raktárt kell használnia.
A materializált nézet frissítéséhez az azt létrehozó munkaterületen kell lennie.
A munkaterületnek olyan régióban kell lennie, amely támogatja a kiszolgáló nélküli SQL-raktárakat.
Materializált nézetek lekérdezése:
- A materializált nézet tulajdonosának kell lennie, vagy rendelkeznie
SELECT
kell a materializált nézettel, valamint a szüleivel ésUSE CATALOG
a szüleivelUSE SCHEMA
. - A következő számítási erőforrások egyikét kell használnia:
- SQL Warehouse
- Delta Live Tables-felületek
- Megosztott hozzáférési mód számítása
- Egyfelhasználós hozzáférési mód a Databricks Runtime 15.4-ben és újabb verziókban, amennyiben a munkaterület engedélyezve van a kiszolgáló nélküli számításhoz. Lásd: Részletes hozzáférés-vezérlés az egyfelhasználós számításban.
- Csak akkor, ha Ön a materializált nézet tulajdonosa: egyetlen felhasználói hozzáférési módú számítási erőforrás, amely a Databricks Futtatókörnyezetet 14.3 és 15.3 között futtatja.
A materializált nézetek használatára vonatkozó egyéb korlátozásokról a Korlátozások című témakörben olvashat.
Materializált nézet létrehozása
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. A materializált nézet létrehozása szinkron művelet, ami azt jelenti, hogy a CREATE MATERIALIZED VIEW
parancs letiltja a materializált nézet létrehozását és a kezdeti adatbetöltés befejezését. A rendszer automatikusan létrehoz egy kiszolgáló nélküli Delta Live Tables-folyamatot minden Databricks SQL materializált nézethez. A materializált nézet frissítésekor a Delta Live Tables folyamat feldolgozza a frissítést.
Materializált nézet létrehozásához használja az utasítást CREATE MATERIALIZED VIEW
. 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.
Kiválaszthatja azt a futtatókörnyezeti csatornát, ahol a létrehozási utasítás a záradékkal fut, TBLPROPERTIES
és a beállítás "PREVIEW"
értéke vagy "CURRENT"
. Az alapértelmezett érték "CURRENT"
. A Delta Live Tables-csatornákról további információt a Delta Live Tables futtatókörnyezeti csatornáiban talál. A szintaxissal és paraméterekkel kapcsolatos részletekért lásd: CREATE MATERIALIZED VIEW.
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
ésUSE SCHEMA
a katalógus és a séma jogosultságai, amelyek tartalmazzák a materializált nézet forrástábláit.USE CATALOG
ésUSE SCHEMA
jogosultságokat a materializált nézet célkatalógusában és sémáján.CREATE TABLE
ésCREATE 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
base_table1
GROUP BY
date;
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 művelet alapértelmezés szerint szinkron, ami azt jelenti, hogy a parancs letiltja a frissítési művelet befejezéséig. A materializált nézet frissítéséhez használja az utasítást REFRESH MATERIALIZED VIEW
. A parancs SQL-szintaxisának és paramétereinek részleteiért tekintse meg a FRISSÍTÉS (MATERIALIZED VIEW vagy STREAMING TABLE) című témakört. A növekményesen frissíthető materializált nézetek típusairól további információt a materializált nézetek növekményes frissítése című témakörben talál.
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, egy SQL-raktárhoz csatolt jegyzetfüzetet, a Databricks SQL CLI-t vagy a Databricks SQL API-t.
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 kiszolgáló nélküli Delta Live Tables-folyamatokat a frissítési műveletek feldolgozásához. A frissítést a Delta Live Tables folyamat felügyeli, a frissítést pedig a materializált nézet létrehozásához használt Databricks SQL Warehouse figyeli. A materializált nézetek ütemezés szerint futó Delta Live Tables-folyamattal frissíthetők. Lásd: Aktivált és folyamatos folyamat mód.
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. Ez a frissítési paranccsal állítható be. Lásd: FRISSÍTÉS (MATERIALIZED VIEW vagy STREAMING TABLE) Az egyes megközelítésekhez társított viselkedés a következő:
- Szinkron: A szinkron frissítés megakadályozza, hogy más műveletek folytassanak a frissítés befejezéséig. Ha az eredményre a következő lépéshez van szükség, például a frissítési műveletek vezénylési eszközökben, például a Databricks Jobsban történő szekvenálásakor, használjon szinkron frissítést. A materializált nézetek feladattal való vezényléséhez használja az SQL-feladat típusát. Lásd: Munkafolyamatok ütemezése és vezénylálása.
- Aszinkron: Az aszinkron frissítés elindít egy háttérfeladatot a Delta Live Tables számításán, amikor egy materializált nézet frissítése megkezdődik, így a parancs az adatbetöltés befejeződése előtt visszatérhet. Ez a frissítési típus költségmegtakarítást okozhat, mert a művelet nem feltétlenül rendelkezik számítási kapacitással abban a raktárban, ahol a parancsot kezdeményezik. Ha a frissítés tétlenné válik, és más feladatok nem futnak, a raktár leállhat, miközben a frissítés más rendelkezésre álló számítást használ. Az aszinkron frissítések emellett több művelet párhuzamos indítását is támogatják.
Egyes lekérdezések növekményesen frissíthetők. A materializált nézetek növekményes frissítését 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. Ütemezés beállításához tegye az alábbiak egyikét:
- Az ütemezés konfigurálása a
SCHEDULE
záradékkal a materializált nézet létrehozásakor - Adjon hozzá egy ütemezést az ALTER MATERIALIZED 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és megtekintéséhez tegye az alábbiak egyikét:
- Futtassa az utasítást
DESCRIBE EXTENDED
az SQL-szerkesztőből az Azure Databricks felhasználói felületén. - A Katalóguskezelővel megtekintheti a materializált nézetet. Az ütemezés az Áttekintés lapon, a Frissítés állapot alatt található. Lásd: Mi az a Katalóguskezelő?.
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:
- Másolja és illessze be az utasítás által
DESCRIBE EXTENDED
visszaadott táblázat Legújabb frissítés sorában megjelenő hivatkozást. - A materializált nézet leállás lapján kattintson a Folyamatok elemre, majd a folyamat hivatkozására.
Az Azure Databricks felhasználói felületén az SQL-szerkesztővel küldött aszinkron REFRESH
parancsok esetében a frissítési állapotot az Eredmények panelen látható hivatkozásra kattintva tekintheti meg.
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 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é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:
- A materializált nézet leállás lapján kattintson a Folyamatok elemre, majd a folyamat hivatkozására.
- Kattintson a 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épesSELECT
a materializált nézetre.REFRESH
- a felhasználó képesREFRESH
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?
Korlátozások
- A számítási és munkaterületi követelményekről a Követelmények című témakörben olvashat.
- 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 csakNULL
az értékek maradnak az oszlopban, akkor a materializált nézetek eredményül kapott összesített értéke nulla helyettNULL
. - 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ékotCOUNT DISTINCT
tartalmazza, a mögöttes fájlok tartalmazzák a tényleges értékekfield_a
listáját.