Növekményes frissítés materializált nézetek számára
Ez a cikk ismerteti a materializált nézetek növekményes frissítéseinek szemantikáját és követelményeit, és azonosítja a növekményes frissítést támogató SQL-műveleteket, kulcsszavakat és záradékokat. Ismerteti a növekményes és a teljes frissítés közötti különbségeket, és javaslatokat tartalmaz a materializált nézetek és a streamelési táblák közötti választáshoz.
Ha kiszolgáló nélküli folyamatokkal futtat frissítéseket a materializált nézeteken, számos lekérdezés növekményesen frissíthető. A növekményes frissítések a materializált nézet meghatározásához használt adatforrások változásainak észlelésével és az eredmény növekményes számításával takarítják meg a számítási költségeket.
A növekményes frissítéshez kiszolgáló nélküli folyamatok szükségesek
A materializált nézetek növekményes frissítése kiszolgáló nélküli folyamatokat igényel.
A Databricks SQL-ben definiált materializált nézetek frissítési műveletei mindig kiszolgáló nélküli folyamatokkal futnak.
A DLT-folyamatokkal definiált materializált nézetek esetében a folyamatot kiszolgáló nélküli használatra kell konfigurálnia. Lásd: Kiszolgáló nélküli DLT-folyamat konfigurálása.
Milyen a materializált nézetek frissítési szemantikája?
A materializált nézetek a kötegelt lekérdezésekkel egyenértékű eredményeket garantálnak. Vegyük például a következő összesítő lekérdezést:
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Ha ezt a lekérdezést bármely Azure Databricks-termékkel futtatja, az eredményt kötegelt szemantikával számítja ki a forrás transactions_table
összes rekordjának összesítése érdekében, ami azt jelenti, hogy a rendszer minden forrásadatot egy műveletben vizsgál és összesít.
Feljegyzés
Egyes Azure Databricks-termékek gyorsítótárazása automatikusan eredményt ad a munkameneteken belül vagy a munkamenetek között, ha az adatforrások nem változtak az utolsó lekérdezés futtatása után. Az automatikus gyorsítótárazási viselkedés eltér a materializált nézetektől.
Az alábbi példa materializált nézetté alakítja a kötegelt lekérdezést:
CREATE OR REPLACE MATERIALIZED VIEW transation_summary AS
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Materializált nézet frissítésekor a kiszámított eredmény megegyezik a kötegelt lekérdezés szemantikájával. Ez a lekérdezés egy olyan materializált nézet példája, amely növekményesen frissíthető, ami azt jelenti, hogy a frissítési művelet mindent megtesz annak érdekében, hogy csak a forrásban lévő új vagy módosított adatokat dolgozza fel, transactions_table
az eredmények kiszámításához.
Az adatforrás szempontjai a materializált nézetek esetében
Bár bármilyen adatforráshoz definiálhat materializált nézetet, nem minden adatforrás alkalmas a materializált nézetekre. Vegye figyelembe a következő kikötéseket és javaslatokat:
Fontos
A materializált nézetek minden erőfeszítést megtesznek a támogatott műveletek eredményeinek növekményes frissítésére. Az adatforrások egyes módosításai teljes frissítést igényelnek.
A materializált nézetek összes adatforrásának robusztusnak kell lennie a teljes frissítés szemantikája érdekében, még akkor is, ha a materializált nézetet meghatározó lekérdezés támogatja a növekményes frissítést.
- Azoknál a lekérdezéseknél, ahol a teljes frissítés túlságosan költséges, adatfolyam-táblák használatával garantálhatja a pontos egyszeri feldolgozást. Ilyenek például a nagyon nagy táblák.
- Ne definiáljon materializált nézetet adatforráshoz, ha a rekordokat csak egyszer kell feldolgozni. Ehelyett használjon streamelési táblázatokat. Ilyenek például a következők:
- Olyan adatforrások, amelyek nem őrzik meg az adatelőzményeket, például a Kafkát.
- Betöltési műveletek, például olyan lekérdezések, amelyek az Automatikus betöltő használatával töltik be az adatokat a felhőobjektum-tárolóból.
- Minden olyan adatforrás, ahol a feldolgozás után törölni vagy archiválni szeretné az adatokat, de az alsóbb rétegbeli táblákban meg kell őriznie az adatokat. Például egy dátumparticionált tábla, amelyben egy bizonyos küszöbértéknél régebbi rekordokat szeretne törölni.
- Nem minden adatforrás támogatja a növekményes frissítéseket. Az alábbi adatforrások támogatják a növekményes frissítést:
- Delta-táblák, beleértve a Unity Catalog által felügyelt táblákat és a Delta Lake által támogatott külső táblákat.
- Materializált nézetek.
- Streaming táblák, ideértve a
APPLY CHANGES INTO
műveletek céljait.
- Egyes növekményes frissítési műveletekhez engedélyezni kell a sorkövetést a lekérdezett adatforrásokon. A sorkövetés olyan Delta Lake-funkció, amelyet csak a Delta-táblák támogatnak, amelyek materializált nézeteket, streamelő táblákat és Unity Catalog által felügyelt táblákat tartalmaznak. Lásd: Sorkövetés használata Delta-táblákhoz.
Materializált nézetek optimalizálása
A legjobb teljesítmény érdekében a Databricks a következő funkciók engedélyezését javasolja az összes materializált nézetforrástáblán:
A materializált nézetek frissítési típusai
A materializált nézetek frissítése teljes vagy inkrementális. Minden művelet esetében a növekményes frissítés és a teljes frissítés eredménye megegyezik. Az Azure Databricks egy költségelemzést futtat annak megállapításához, hogy az adatforrások módosítása teljes frissítést igényel-e.
A használt frissítés típusának meghatározásához lásd: Frissítés típusának meghatározása.
Teljes frissítés
A teljes frissítés felülírja az eredményeket a materializált nézetben a forrásban elérhető összes adat újrafeldolgozásával. Az adatforrások változásától függően az összes materializált nézet teljesen frissíthető egy adott frissítésen.
Igény szerint kényszerítheti a teljes frissítést. A Databricks SQL használatával definiált materializált nézetekhez használja a következő szintaxist:
REFRESH MATERIALIZED VIEW mv_name FULL
A DLT-folyamatban definiált materializált nézetek esetében dönthet úgy, hogy teljes frissítést futtat a kijelölt adathalmazokon vagy a folyamat összes adathalmazán. Lásd folyamatfrissítés szemantikáját.
Fontos
Ha egy teljes frissítés olyan adatforráson fut, ahol az adatmegőrzési küszöbérték vagy a manuális törlés miatt a rekordok el lettek távolítva, az eltávolított rekordok nem jelennek meg a számított eredményekben. Előfordulhat, hogy nem tudja helyreállítani a régi adatokat, ha az adatok már nem érhetők el a forrásban.
Feljegyzés
Ha szeretné, letilthatja a teljes frissítést egy táblán, ha a táblatulajdonságot pipelines.reset.allowed
false
értékre állítja.
Növekményes frissítés
A növekményes frissítés az utolsó frissítés után módosítja a mögöttes adatokat, majd hozzáfűzi az adatokat a táblához. Az alaptábláktól és a belefoglalt műveletektől függően csak bizonyos típusú materializált nézetek frissíthetők növekményesen.
Csak a kiszolgáló nélküli folyamatokkal frissített materializált nézetek használhatnak növekményes frissítést. A kiszolgáló nélküli folyamatokat nem használó materializált nézetek mindig teljesen frissülnek.
Ha a materializált nézetek SQL-raktárral vagy kiszolgáló nélküli DLT-folyamattal jönnek létre, a rendszer automatikusan növekményesen frissíti őket, ha a lekérdezések támogatottak. Ha egy lekérdezés növekményes frissítéshez nem támogatott kifejezéseket tartalmaz, a rendszer teljes frissítést hajt végre, ami további költségeket okozhat.
Materializált nézet növekményes frissítésének támogatása
Az alábbi táblázat az SQL-kulcsszó vagy záradék növekményes frissítésének támogatását sorolja fel.
Fontos
Egyes kulcsszavakhoz és záradékokhoz engedélyezni kell a sorkövetést a lekérdezett adatforrásokon. Lásd: Sorkövetés használata Delta-táblákhoz.
Ezek a kulcsszavak és záradékok csillaggal (*) vannak megjelölve az alábbi táblázatban.
SQL-kulcsszó vagy záradék | Növekményes frissítés támogatása |
---|---|
SELECT Kifejezések* |
Igen, a determinisztikus beépített függvényeket és a nem módosítható, felhasználó által definiált függvényeket (UDF-eket) tartalmazó kifejezések támogatottak. |
GROUP BY |
Igen |
WITH |
Igen, a gyakori táblakifejezések támogatottak. |
UNION ALL * |
Igen |
FROM |
A támogatott alaptáblák közé tartoznak a Delta-táblák, a materializált nézetek és a streamelési táblák. |
WHERE , HAVING * |
Olyan szűrő záradékok, mint például WHERE és HAVING , támogatottak. |
INNER JOIN * |
Igen |
LEFT OUTER JOIN * |
Igen |
FULL OUTER JOIN * |
Igen |
RIGHT OUTER JOIN * |
Igen |
OVER |
Igen. Az ablakfüggvények inkrementalizálásához meg kell adni a PARTITION_BY oszlopokat. |
QUALIFY |
Igen |
EXPECTATIONS |
Nem Az elvárásokat használó materializált nézetek mindig teljesen frissülnek. |
Feljegyzés
A nem determinisztikus függvények például CURRENT_TIMESTAMP
nem támogatottak.
Frissítés típusá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 újraszámí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 , PARTITION_OVERWRITE vagy WINDOW_FUNCTION |
Igen | A materializált nézet növekményesen frissült a megadott technikával. |
APPEND_ONLY |
Igen | A materializált nézet folyamatosan frissült, mert a bemenetek és a materializált nézet módosításai csak hozzáadások voltak. |
GROUP_AGGREGATE vagy GENERIC_AGGREGATE |
Igen | A materializált nézet növekményesen frissült egy összesítő függvény használatával. |
A használt technika meghatározásához kérdezze le a DLT eseménynaplóját, amelyben a event_type
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 kvalifikált nevére, beleértve a katalógust és a sémát is.
Lásd Mi a DLT-eseménynapló?.