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


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.allowedfalseé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_TIMESTAMPnem 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_OVERWRITEvagy 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_typeplanning_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ó?.