Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Azure Databricks Delta Lake két elkülönítési szintet támogat, amelyek szabályozzák, hogy egy adott tábla egyidejű műveletei hogyan működnek együtt:
| Elkülönítési szint | Leírás |
|---|---|
| Szerializálható | A legerősebb elkülönítési szint. Biztosítja, hogy a véglegesített írási műveletek és az összes olvasás szerializálható legyen. A műveletek akkor engedélyezettek, ha van olyan sorozat, amely egyenként hajtja végre a táblában látható eredményt. Az írási műveletek esetében ez a sorozat megegyezik a táblázat előzményeiben látható sorrenddel. |
| WriteSerializable (alapértelmezett) | A szerializálhatónál gyengébb elkülönítési szint. Biztosítja, hogy csak az írási műveletek (nem olvasások) szerializálhatók legyenek. Ez még mindig erősebb, mint a Pillanatkép elkülönítése. Az adatok konzisztenciájának és rendelkezésre állásának egyensúlyát biztosítja a leggyakoribb műveletekhez. |
Az elkülönítési szintek hatása az olvasásokra
Az olvasási műveletek mindig pillanatkép-elkülönítést használnak. Az íráselkülönítési szint határozza meg, hogy az olvasó lát-e pillanatképet egy tábláról, amely az előzmények szerint "soha nem létezett".
- Szerializálható: Az olvasó mindig csak az előzményeknek megfelelő táblákat látja
- WriteSerializable: Az olvasó olyan táblázatállapotot láthat, amely nem létezik a Delta-naplóban
Példa: Egyidejű törlés és beszúrás
Fontolja meg azt a forgatókönyvet, amikor egy hosszú ideig futó törlési tranzakció és egy beszúrási tranzakció egyidejűleg indul el, és olvassa el a verziót v0. Az insert tranzakció először véglegesíti a műveletet, és létrehozza a v1 verziót. Ezt követően a törlési tranzakció megpróbálja véglegesíteni a következőt v2:
t0: deleteTxn_START
t1: insertTxn_START
t2: insertTxn_COMMIT(v1)
t3: deleteTxn_COMMIT(v2)
Ebben a forgatókönyvben insertTxn által beszúrt adatokat deleteTxn nem látta, és nem törölte őket.
-
Serializable:
deleteTxnnem véglegesíthető, és ütközés lép fel -
WriteSerializable:
deleteTxnvéglegesíthető, mert a tranzakciók megrendelhetők. Az eredményként kapott táblaállapot olyan, minthainsertTxnutánadeleteTxntörtént volna, így a beszúrt sorok a táblázat részét képezik. A Delta előzményei azonban a fizikai kötelezettségsorrendet jelenítik meg (insertTxna v1-nél korábbideleteTxna v2-nél).
Az elkülönítési szint beállítása
Az elkülönítési szint beállítása a ALTER TABLE következő paranccsal:
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.isolationLevel' = <level-name>)
Ahol <level-name>, ott Serializable vagy WriteSerializable.
Example:
-- Change from default WriteSerializable to Serializable
ALTER TABLE my_table SET TBLPROPERTIES ('delta.isolationLevel' = 'Serializable')
Mikor véglegesíti a Delta Lake a táblázat olvasása nélkül?
A Delta Lake INSERT vagy hozzáfűzési műveletek nem olvassák be a tábla állapotát a véglegesítés előtt, ha a következő feltételek teljesülnek:
- A logika SQL-logikával
INSERTvagy hozzáfűzési móddal van kifejezve - A logika nem tartalmaz olyan al lekérdezéseket vagy feltételes elemeket, amelyek hivatkoznak az írási művelet által megcélzott táblára
Más véglegesítésekhez hasonlóan a Delta Lake a tranzakciónapló metaadataival ellenőrzi és feloldja a táblaverziókat a véglegesítéskor, de a tábla egyik verziója sem olvasható be.
Megjegyzés:
Számos gyakori minta MERGE műveleteket használ az adatok táblázatfeltételek alapján történő beszúrásához. Bár lehetséges lehet újraírni ezt a logikát INSERT utasítások használatával, ha bármely feltételes kifejezés a céltábla egyik oszlopára hivatkozik, ezek az utasítások ugyanolyan egyidejűségi korlátozásokkal rendelkeznek, mint MERGE.