Mikor kell használni a REPLACE WHERE-et a materializált nézetekkel szemben

Mind a REPLACE WHERE flowk, mind az önálló materializált nézetek lehetővé teszik a leszármaztatott táblák fenntartását, amelyek a forrásadatok változásaival együtt naprakészek maradnak, de más problémákat oldanak meg. A legtöbb batch extract, transform and load (ETL) munkafolyamat esetén, amely időszakosan felülír egy időablakot vagy partíciót, használjon inkrementális REPLACE WHERE folyamatot. Használj materializált nézeteket lekérdezésgyorsító rétegként, amely előre kiszámított eredményeket szolgáltat a dashboardok és jelentések számára.

Ez az oldal önálló streaming táblákat és materializált nézeteket tárgyalja. A Lakeflow-folyamatban lévő REPLACE WHERE folyamatokról lásd: Kötegelt feldolgozás REPLACE WHERE folyamatokkal.

Használd a REPLACE WHERE elemet köteges felülírásokhoz

A REPLACE WHERE folyamat csak azokat a sorokat számolja újra és felülírja, amelyek egy predikátumnak felelnek meg, például egy időablaknak vagy egy partíciónak. Minden más sor érintetlen marad. Mivel a folyamat újraértékeli a forráslekérdezést csak erre a predikátumtartományra, minden frissítés költsége a tartomány méretétől függ, nem a tábla méretétől.

A materializált nézet megőrzi a meghatározó lekérdezésének teljes eredményét. Az Azure Databricks fokozatosan frissíti a materializált nézetet, ha a lekérdezés és a forrásadatok ezt lehetővé teszik, egyébként teljes frissítést futtat. Az, hogy egy frissítés inkrementális-e, a lekérdezés szerkezetétől és a forrástábláktól függ, így minden frissítés költsége nehezebb előre jelezni. Lásd : Hogyan frissülnek az önálló materializált nézetek?.

Egy kötött ETL adatmodell esetén, amely körülhatárolt tartományokban változik, a REPLACE WHERE flow lehetővé teszi, hogy pontosan szabályozd, mely sorokat írja újra az egyes frissítések. A materializált nézet jobban illeszkedik, ha az olvasóknak gyors hozzáférésre van szükségük előre kiszámított eredményhez.

Konstrukciók leképezése a medálrétegekre

Az alábbi táblázat a medallion architecture minden rétegét a Databricks által javasolt konstrukcióhoz képezi le:

Réteg Épít Miért
Bronz (nyers adatbetöltés) Adatbetöltés Lakeflow Connecttel vagy Auto Loaderrel A nyers rekordokat beérkezésükkor tölti be, anélkül, hogy újra feldolgozná a korábbi adatokat.
Ezüst (tények) Fokozatos CSERE WHERE folyamat Csak az érintett időablakokat vagy partíciókat írja felül a tényfrissítések, a későn érkező adatok és a javítások esetén.
Ezüst (dimenziók) AUTO CDC Áramlás Automatikusan alkalmazza a beszúrási, frissítési és törlési szemantikát, valamint megőrzi az előzményeket lassan változó dimenziók (SCD) 1-es vagy 2-es típusa esetén.
Arany (aggregációk és adatmodellek) Fokozatos CSERE WHERE folyamat Csak az aggregátumok és modellek predikátum tartományát számolja újra, elkerülve a teljes tábla-újraszámításokat.
Lekérdezések gyorsítása és kiszolgálása materializált nézet Előre kiszámított eredményeket biztosít a dashboardokhoz és jelentésekhez, valamint naprakészen tartja a lekérdezések eredményeit.

Útmutató döntésekhez

Használja az alábbi útmutatót, hogy válasszon a két konstrukció között.

Használj REPLACE WHERE folyamatot, amikor:

  • Futtass időszakos kötegi felülírásokat egy időablak vagy partíció felülírását.
  • A későn érkező adatok javítása.
  • Alkalmazzon megfelelőségi törléseket egy korlátozott tartományban.
  • Frissítsd az adatokat a partíció szintjén.

Használj egy materializált nézetet, amikor:

  • Gyorsítsd fel az irányítópult-lekérdezéseket.
  • Szolgáltasson előre kiszámított aggregációkat az olvasóknak.
  • Tartsd naprakészen a lekérdezési eredményeket egy kiszolgáló réteg esetében.

Példa: inkrementális felülírás REPLACE WHERE

Az alábbi példa egy céltáblát határoz meg, amely minden frissítésnél csak az utolsó 7 nap adatát írja felül. Frissítés közben a folyamat törli a predikátumhoz tartozó sorokat, újraszámolja a forráslekérdezést ugyanarra a tartományra, és beilleszti az eredményeket. Az ablakon kívüli sorok érintetlenül maradnak:

CREATE OR REFRESH STREAMING TABLE payments_latest
FLOW REPLACE WHERE payment_date >= date_add(current_date(), -7) BY NAME
SELECT payment_id, booking_id, status, payment_date
FROM samples.wanderbricks.payments;

BY NAME szükséges, hogy az oszlopok név szerint egyezzenek, nem pedig pozíció szerint. A teljes szintaxisért, predikátum-felülbírálásokról, visszatöltésekről és inkrementális frissítési viselkedésért lásd a REPLACE WHERE flows-ot önálló streaming táblákhoz.

További erőforrások