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.
Fontos
A Unity Catalog által felügyelt Delta-táblákba írt tranzakciók nyilvános előzetes verzióban érhetők el.
A Unity Catalog által felügyelt Iceberg-táblákba írt tranzakciók privát előzetes verzióban érhetők el. Az előzetes verzióhoz való csatlakozáshoz küldje el a felügyelt Iceberg-táblák előzetes regisztrációs űrlapot.
A tranzakciók segítségével több SQL-utasítás és tábla műveleteit koordinálhatja. Az összes módosítás vagy együtt sikeres, vagy együtt visszagördül, így biztosítva az adatkonzisztenciát a műveletek és táblák között. A tranzakciók ACID-garanciákat biztosítanak: atomiság, konzisztencia, izoláltság és tartósság. Lásd: Milyenek az ACID-garanciák az Azure Databricks szolgáltatásban?. A tranzakciók tárolt eljárásokkal és SQL Scriptinggel használhatók a kritikus fontosságú adattárház-számítási feladatok létrehozásához.
Az alábbi példa egy tranzakciót mutat be:
BEGIN ATOMIC
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
INSERT INTO audit_log VALUES (1, 2, 100, current_timestamp());
END;
Mindhárom utasítás együtt elköteleződik. Ha bármelyik utasítás meghiúsul, az összes módosítás visszaáll, és a Databricks mellékhatások nélkül leállítja a tranzakciót.
A tranzakciókkal kapcsolatos gyakorlati gyakorlatért tekintse meg az oktatóanyagot: Tranzakciók koordinálása táblák között.
Követelmények
Több utasítást vagy több táblát érintő tranzakciók végrehajtása:
- Minden táblára írni kell:
- Unity Catalog által kezelt táblák (Delta vagy Iceberg)
- A katalógus véglegesítéseinek engedélyezése
- Támogatott számítás használata:
- Nem interaktív tranzakciók esetén használja a Databricks Runtime 18.0-s vagy újabb verzióját futtató SQL Warehouse-t, kiszolgáló nélküli számítást vagy fürtöt.
- Interaktív tranzakciókhoz használjon bármely SQL Warehouse-t.
- Megosztott Delta-megosztási eszközök tranzakcióihoz használja a Databricks Runtime 18.1-et vagy újabb verzióját.
Tranzakciós módok
Azure Databricks két tranzakciós módot támogat:
| Mód | Szemantika | Elköteleződés | Visszagörgetés | A következőkre alkalmas |
|---|---|---|---|---|
| Nem interaktív | ATOMIC összetett utasítás | Automatikus siker esetén | Automatikus aktiválás hiba esetén | Rögzített sorozatok, ütemezett feladatok |
| Interaktív | TRANZAKCIÓ INDÍTÁSA; VÉGLEGESÍTÉS; | Kézikönyv | Kézikönyv | Feltételes logika, ellenőrzés és hibakeresés, JDBC, ODBC, PyDBC |
Mindkét mód részletes szintaxisát, példáit és használati mintáit a Tranzakciós módok című témakörben találja.
Támogatott műveletek
A tranzakciókon belül a következő műveleteket használhatja:
| Operation | Leírás |
|---|---|
SELECT (alválasztás) |
Adatok lekérdezése és eredmények ellenőrzése |
VALUES klauzula |
Tesztadatok vagy állandó értékek létrehozása |
INSERT (az összes változatot is beleértve) |
Új sorok hozzáadása |
UPDATE |
Meglévő sorok módosítása |
COPY INTO |
Adatok betöltése fájlból Delta-táblába |
DELETE FROM |
Sorok eltávolítása |
MERGE INTO |
A beszúrást, frissítést és törlést kombináló upsert minták |
Források olvasása tranzakciókban
A tranzakciók a Unity Catalog tábláiból (Delta és Iceberg), streamelési táblákból, nézetekből és materializált nézetekből olvashatók. Ha nem tranzakciós forrásokból szeretne olvasni, használja a tippet allow_nontransactional_reads .
Olvasás nem tranzakciós forrásokból
Ha nem tranzakciós forrásokból, például Parquet-fájlokból, Avro-fájlokból és összevont táblákból szeretne JDBC-vel olvasni, használja a allow_nontransactional_reads tippet, ahogy az alábbi példa is mutatja:
BEGIN TRANSACTION;
-- Read from a non-transactional Parquet source
INSERT INTO transactional_table
SELECT col1, col2
FROM parquet.`/path/to/data`
WITH (allow_nontransactional_reads = true);
-- Read from a managed Delta table (no hint needed)
INSERT INTO another_table
SELECT * FROM managed_delta_table;
COMMIT;
Figyelmeztetés
A nem tranzakciós olvasások nem megismételhetők. A forrásadatok egyidejű módosítása a tranzakció során inkonzisztens olvasást eredményezhet.
Tranzakcióelkülönítés
A tranzakciók minden utasításban ismétlődő olvasást biztosítanak. Amikor egy tranzakcióban hozzáfér egy táblához, Azure Databricks az első hozzáféréskor rögzíti a tábla konzisztens pillanatképét. A táblázat minden későbbi olvasása ezt a pillanatképet használja, így az olvasások akkor is konzisztensek maradnak, ha más felhasználók egyidejűleg módosítják ugyanazokat a táblákat.
Példa:
BEGIN TRANSACTION;
-- First access to products table captures snapshot
SELECT * FROM products WHERE product_id = 1001;
-- Another user updates product 1001
-- Still reads the same snapshot (repeatable read)
SELECT * FROM products WHERE product_id = 1001;
COMMIT;
Ütközésészlelés és egyidejűség
Azure Databricks optimista egyidejűségi vezérlést használ. A tranzakciók zárolás nélkül folytatódnak, és a véglegesítéskor ütközések észlelhetők. A véglegesítéskor Azure Databricks ellenőrzi, hogy más tranzakciók módosították-e ugyanazokat az adatokat a tranzakció elindítása után. Ha ütközések állnak fenn, a tranzakció meghiúsul. Nem interaktív tranzakciók esetén a visszaállítás is automatikusan megtörténik. Interaktív tranzakciók esetén explicit módon kell futtatnia ROLLBACK a tranzakció állapotának törlését egy új tranzakció megkezdése előtt.
A nem interaktív tranzakciók támogatják a sorszintű egyidejűséget. Két tranzakció anélkül módosíthatja ugyanabban az adatfájlban a különböző sorokat, hogy ütköznek, ha a sorszintű egyidejűség engedélyezve van a céltáblákon.
Az interaktív tranzakciók támogatják a táblaszintű egyidejűséget.
Ütközési forgatókönyvek
| Scenario | Leírás |
|---|---|
| Írás-írás konfliktusok | Két tranzakció frissíti vagy törli ugyanazokat a sorokat. |
| Írás-olvasás ütközések | Egy másik tranzakció módosította a tranzakció által beolvasott sorokat. Csak szerializálható elkülönítésre vonatkozik. |
| Fantom olvasási ütközések | Egy másik tranzakció új sorokat adott hozzá, amelyek megfelelnek a tranzakció olvasási predikátumának. A WriteSerializable és a szerializálható szigetelésre egyaránt vonatkozik. |
| Metaadat-ütközések | Egy másik tranzakció módosította a tábla sémáját vagy tulajdonságait. |
A tranzakciók elkülönítési szintjeiről és ütközések feloldásáról további információt a Tranzakciós módok című témakörben talál. Az elkülönítési szintekről és a Delta Lake-táblák írási ütközési viselkedéséről a Azure Databricks Optimizálási javaslatok Azure Databricks című témakörben olvashat.
A tranzakciók megjelenése a Delta-naplóban
Minden sikeres tranzakció egyetlen bejegyzésként jelenik meg a tábla Delta-naplójában, függetlenül attól, hogy hány egyes utasítás futott a tranzakción belül. Ez tiszta naplózási útvonalat biztosít, és leegyszerűsíti a visszaállítási műveleteket.
A tranzakción belüli egyes műveletek JSON-metaadatokként érhetők el a tranzakció deltanapló-bejegyzésében.
Hibakezelés és visszaállítás
Az alábbi táblázat bemutatja, hogyan fordulnak elő hiba-visszaállítások mindkét tranzakciótípus esetében:
| Scenario | Nem interaktív tranzakciók viselkedése | Interaktív tranzakciók viselkedése |
|---|---|---|
| Nyilatkozathiba | Minden olyan utasítás, amely hibát jelez, azonnali automatikus visszaállítást okoz. | Ha a munkamenet még aktív, explicit módon kell futtatnia a ROLLBACK parancsot a módosítások elvetéséhez. |
| Sikertelen érvényesítési logika vagy üzleti szabályok | Az SIGNAL használatával kivételt dobhatunk, és automatikus visszagörgetést indíthatunk el. |
A módosítások elvetéséhez futtassa a ROLLBACK parancsot . |
| Munkamenet megszakítása | A tranzakció automatikusan visszagördül. | A tranzakció automatikusan visszagördül. |
| Időkorlát | Automatikusan visszagördül 48 óra teljes időtartam után. | Automatikusan visszagördül 10 perc inaktivitás vagy 48 óra teljes időtartam után (lásd : Korlátozások). A tranzakció mellékhatások nélkül leáll, de explicit módon kell futtatnia a ROLLBACK parancsot a tranzakció állapotának törléséhez, ha a munkamenet továbbra is aktív. |
Interaktív tranzakciók esetén kifejezetten visszavonhatja a tranzakciót a ROLLBACK utasítással. Ez hasznos akkor, amikor érvényességi logika vagy üzleti szabályok alapján szeretné elvetni a módosításokat, vagy ha a munkamenet aktív marad egy utasításhiba után.
Bevált gyakorlatok
Kövesse az alábbi eljárásokat az ütközések csökkentéséhez és a tranzakció teljesítményének optimalizálásához.
Ütközések elkerülése
- Tartsa rövidre a tranzakciókat: A hosszan futó tranzakciók növelik az ütközés valószínűségét, és hosszabb ideig tartják az erőforrásokat.
- Korai ellenőrzés: Ellenőrizze az előfeltételeket a tranzakció elején, hogy gyorsan meghiúsuljon.
- A Databricks a legtöbb használati esetben nem interaktív tranzakciókat javasol: a nem interaktív tranzakciók sorszintű egyidejűséget használnak. Lásd : nem interaktív tranzakciók.
- Újrapróbálkozás ütközések esetén: Ütközések bekövetkeztekor próbálja újra a tranzakciót friss adatokkal.
Különböző ügyfelek tranzakcióinak használata
A tranzakciók különböző ügyfélfelületeken működnek:
-
SQL-szerkesztő és -jegyzetfüzetek: Használja
BEGIN ATOMIC ... END;vagyBEGIN TRANSACTION; ... COMMIT;szintaxist közvetlenül AZ SQL-cellákban, vagy használjaspark.sql()Python/Scala-jegyzetfüzetekben. Lásd Tranzakciós módok. -
JDBC-alkalmazások: JDBC API-metódusok (
setAutoCommit(false),commit(),rollback()) használata a Databricks JDBC-illesztőprogram 3.0.5-ös és újabb verziójával. Lásd például: Tranzakciók használata. A tranzakciókon belüli nem támogatott JDBC-műveletek listáját lásd: Nem támogatott JDBC-műveletek. - ODBC-alkalmazások: Használja a Databricks ODBC Driver 2.10.0-s vagy újabb verzióját. A tranzakciókon belüli nem támogatott ODBC-műveletek listáját lásd: Nem támogatott ODBC-műveletek.
-
Python alkalmazások: A Databricks SQL Connector használata
autocommit=False. Lásd: Databricks SQL Connector for Python. A tranzakciókon belüli nem támogatott Python összekötőműveletek listáját lásd: Nem támogatott Python összekötőműveletek. - Utasítás-végrehajtási API: Tranzakciók futtatása SQL-szintaxissal API-hívásokon keresztül. Lásd: Az utasításvégrehajtási API használata.
Korlátozások
A tranzakciókra a következő korlátozások vonatkoznak:
| Korlátozás | Leírás |
|---|---|
| Interaktív tranzakcióütközések | Interaktív tranzakciók (BEGIN TRANSACTION; ... COMMIT;) konzervatívabb ütközésészlelést használnak, mint a nem interaktív tranzakciók, és táblaszinten ütközhetnek, kivéve INSERT a célzott táblából be nem olvasott műveleteket. Használjon nem interaktív tranzakciókat (ATOMIC összetett utasítást), ha a sorszintű ütközésészlelés fontos. Lásd : nem interaktív tranzakciók. |
| Célok írása | Csak olyan, a Unity Catalog által felügyelt Delta- vagy Iceberg-táblákba írhat, amelyeken engedélyezve van a catalogManaged táblafunkció. Lásd a katalógus véglegesítéseit. |
| Csak DML-műveletek | A tranzakciók támogatják SELECT, INSERT, UPDATE, DELETE, COPY INTOés MERGE. Futtassa a DDL-műveleteket, például CREATE TABLE, ALTER TABLE vagy DROP TABLE, tranzakciókon kívül. |
| A metaadat-műveletek nem támogatottak | A metaadat-műveletek protokolltól függetlenül nem működnek a tranzakciókon belül. Ebbe beletartoznak az RPC-alapú metaadathívások (például JDBC-metódusok DatabaseMetaData és ODBC-katalógusfüggvények), az SQL-alapú parancsok (SHOW TABLES, SHOW DATABASES, DESCRIBE TABLE), valamint SELECT táblák vagy rendszertáblák lekérdezései information_schema. Metaadat-műveletek futtatása tranzakciókon kívül. |
COPY INTO Konkurencia |
A parancsot COPY INTO futtató tranzakció meghiúsul, ha egy másik COPY INTO parancs egyidejűleg fut, hogy ugyanarra a táblára írjon, és először véglegesítse. |
| A folyamatos adatfolyam-írás nem támogatott | A streamelő táblákba történő tranzakciós írások nem támogatottak. |
| Az RLS- és CLM-táblák nem támogatottak | A sorszűrőket és oszlopmaszkokat tartalmazó táblák nem vehetnek részt a tranzakciókban. |
| Táblázat- és megtekintési korlátok | A tranzakciók legfeljebb 100 táblából olvashatnak vagy írhatnak egyszerre, és akár 100 nézetből is olvashatnak. Minden tábla legfeljebb 100 köztes véglegesítéssel rendelkezhet egy tranzakción belül. |
| Az időutazás nem támogatott | Nem használhat időutazást tranzakción belül. |
| Üresjárati időtúllépés | Az interaktív tranzakciók 10 perc inaktivitás után visszafordulnak. A tranzakció mellékhatások nélkül leáll, de explicit módon kell futtatnia a ROLLBACK parancsot a tranzakció állapotának törléséhez, ha a munkamenet továbbra is aktív. |
| Lineage | A tranzakciók sortörést bocsátanak ki az egyes olvasási és írási műveletek során. A leszármazási események akkor is fennmaradnak, ha a tranzakciót visszaállítják. |
| Maximális időtartam | Az összes tranzakció automatikusan visszagördül 48 óra teljes időtartam után. Interaktív tranzakciók esetén a tranzakció mellékhatások nélkül fejeződik be, de explicit módon futtatnia kell a ROLLBACK parancsot a tranzakció állapotának törléséhez, ha a munkamenet továbbra is aktív. |
| Delta Sharing megosztott táblák követelménye | A deltamegosztási szolgáltatóknak meg kell osztaniuk egy táblát WITH HISTORY , hogy a címzettek tranzakciókat futtassanak rajta. A címzettek bármilyen típusú számítással futtathatnak tranzakciókat. |
| A deltamegosztás címzettjének számítási korlátozásai | Azure Databricks címzettek csak megosztott nézeteken, materializált nézeteken, streamelési táblákon és nem Iceberg-alapú idegen táblákon futtathatnak tranzakciókat. A szolgáltatóval azonos Azure Databricks fiókban lévő címzetteknek megosztott vagy kiszolgáló nélküli számítást kell használniuk. Egy másik fiók címzettjeinek kiszolgáló nélküli számítást kell használniuk. |
| Delta-megosztási forrástábla ütközése | A Delta Sharing címzettjei nem hivatkozhatnak egyszerre egy megosztott nézetre és egy megosztott táblára, amelyek ugyanazon forrástáblára utalnak egyetlen tranzakción belül. |
Következő lépések
- Tranzakciós módok
- Oktatóanyag: Tranzakciók koordinálása táblák között
- Katalógus véglegesítései
- Elkülönítési szintek és írási ütközések