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.
Apache Iceberg- és Delta Lake-táblák esetén minden olyan művelet, amely módosítja a táblázatot, új táblaverziót hoz létre. Az előzményadatok használatával naplózhatja a műveleteket, visszaállíthat egy táblát, vagy lekérdezhet egy táblát egy adott időpontban időutazással.
Note
A Databricks nem javasolja a táblaelőzmények hosszú távú biztonsági mentési megoldásként való használatát az adatarchiváláshoz. Csak az elmúlt 7 napot használja az időutazási műveletekhez, kivéve, ha az adatok és a naplómegőrzési konfigurációkat nagyobb értékre állította be.
Táblaelőzmények lekérése
DESCRIBE HISTORY A parancs futtatásával lekérheti az adatokat, beleértve a táblákba való írások műveleteit, felhasználószámát és időbélyegét. A rendszer fordított időrendi sorrendben adja vissza a műveleteket.
A táblaelőzmények megőrzését a táblabeállítás logRetentionDurationhatározza meg, amely alapértelmezés szerint 30 nap.
Note
Az időutazást és a táblaelőzményeket különböző megőrzési küszöbértékek szabályozzák. Lásd : Időutazás.
DESCRIBE HISTORY table_name -- get the full history of the table
DESCRIBE HISTORY table_name LIMIT 1 -- get the last operation only
A Spark SQL szintaxisának részleteiért lásd: DESCRIBE HISTORY.
A Scala, Java és Python szintaxis részleteiért tekintse meg a Delta Lake API dokumentációját.
A Katalóguskezelő vizuálisan jeleníti meg a táblázatelőzményeket az Előzmények lapon.
Előzmények séma
A művelet kimenete az history alábbi oszlopokkal rendelkezik.
| Column | Típus | Description |
|---|---|---|
| verzió | long |
A művelet által létrehozott táblaverzió. |
| timestamp | timestamp |
A verzió véglegesítésekor. |
| userId | string |
A műveletet futtató felhasználó azonosítója. |
| userName | string |
A műveletet futtató felhasználó neve. |
| művelet | string |
A művelet neve. |
| működési paraméterek | map |
A művelet paraméterei (például predikátumok).) A műveletek esetében OPTIMIZE ezek a paraméterek azonosítják a művelet típusát. Lásd : A művelet típusának OPTIMIZE azonosítása. |
| feladat | struct |
A műveletet futtató Lakeflow-feladat részletei. Csak a Lakeflow-feladatból írt véglegesítések esetén töltődik fel. Ellenkező esetben null. |
| jegyzetfüzet | struct |
Annak a Databricks-jegyzetfüzetnek a részletei, amelyből a műveletet futtatták. Csak a Databricks-jegyzetfüzetből írt véglegesítések esetén töltődik fel. Ellenkező esetben null. |
| clusterId | string |
Annak a klaszternek az azonosítója, amelyen a művelet végrehajtása történt. |
| verzióolvasás | long |
Az írási művelet végrehajtásához beolvasott tábla verziója. |
| isolationLevel | string |
A művelethez használt elkülönítési szint. |
| isBlindAppend | boolean |
Hogy ez a művelet hozzáfűzött-e adatokat. |
| műveleti metrikák | map |
A művelet metrikái (például a módosított sorok és fájlok száma).) |
| userMetadata | string |
A felhasználó által megadott véglegesítési metaadatok, ha meg lett adva. |
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
|version| timestamp|userId|userName|operation| operationParameters| job|notebook|clusterId|readVersion| isolationLevel|isBlindAppend| operationMetrics|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
| 5|2019-07-29 14:07:47| ###| ###| DELETE|[predicate -> ["(...|null| ###| ###| 4|WriteSerializable| false|[numTotalRows -> ...|
| 4|2019-07-29 14:07:41| ###| ###| UPDATE|[predicate -> (id...|null| ###| ###| 3|WriteSerializable| false|[numTotalRows -> ...|
| 3|2019-07-29 14:07:29| ###| ###| DELETE|[predicate -> ["(...|null| ###| ###| 2|WriteSerializable| false|[numTotalRows -> ...|
| 2|2019-07-29 14:06:56| ###| ###| UPDATE|[predicate -> (id...|null| ###| ###| 1|WriteSerializable| false|[numTotalRows -> ...|
| 1|2019-07-29 14:04:31| ###| ###| DELETE|[predicate -> ["(...|null| ###| ###| 0|WriteSerializable| false|[numTotalRows -> ...|
| 0|2019-07-29 14:01:40| ###| ###| WRITE|[mode -> ErrorIfE...|null| ###| ###| null|WriteSerializable| true|[numFiles -> 2, n...|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
Note
- Ha a következő módszerekkel ír egy táblába, néhány oszlop nem érhető el:
- A jövőben hozzáadott oszlopok mindig az utolsó oszlop után lesznek hozzáadva.
A műveleti paraméterek ismertetése partitionBy
A partitionBy táblaelőzmények mezője csak olyan CREATE és OVERWRITE műveletekhez használható, amelyek meghatározzák vagy módosítják a tábla partíciós sémáját.
Meglévő táblákhoz (HOZZÁFŰZÉS, INSERT, UPDATE, TÖRLÉS, EGYBEOLVASZTÁS) fűzési műveletek esetén ez a mező üres tömböt [] vagy partíciós oszlopokat jeleníthet meg a használt írási módszertől függően (.save() vs .saveAsTable()).
Ez az inkonzisztencia elvárt viselkedés, és nem befolyásolja az adatok partíciókba való írását. Nem szabad ezt hozzáfűzési műveletek ellenőrzésére használni.
Példa
Tekintsünk egy, a date oszlop szerint particionált táblát. A tábla létrehozásakor a következő partitionBy adatok lesznek kitöltve:
df.write.format("delta") \
.partitionBy("date") \
.saveAsTable("sales_data")
A CREATE művelet az előzményekben a következőt mutatja:
operationParameters: {
"mode": "ErrorIfExists",
"partitionBy": "[\"date\"]"
}
Amikor adatokat fűz ehhez a táblához, partitionBy egy üres tömb jelenik meg:
new_df.write.format("delta") \
.mode("append") \
.saveAsTable("sales_data")
A APPEND művelet a következőt jeleníti meg:
operationParameters: {
"mode": "Append",
"partitionBy": "[]"
}
Az üres partitionBy érték várható. Az adatok továbbra is a megfelelő partíciókra lesznek írva a tábla meglévő partíciós sémája alapján. Vegye figyelembe, hogy .save() az elérési út partícióoszlopokat jeleníthet meg ebben a mezőben, de ez a különbség implementálási részlet, és nem befolyásolja az írási viselkedést.
Műveleti metrikák
A history művelet a műveleti metrikák gyűjteményét adja vissza az operationMetrics oszloptérképen.
Az alábbi táblázatok a térképkulcs-definíciókat művelet szerint sorolják fel.
WRITE, CREATE TABLE AS SELECT, REPLACE TABLE AS SELECT, COPY INTO
Ezekhez a műveletekhez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
numFiles |
Az írott fájlok száma. |
numOutputBytes |
Az írott tartalom bájtban megadott mérete. |
numOutputRows |
Az írott sorok száma. |
STREAMING UPDATE
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
numAddedFiles |
A hozzáadott fájlok száma. |
numRemovedFiles |
Az eltávolított fájlok száma. |
numOutputRows |
Az írott sorok száma. |
numOutputBytes |
Az írás mérete bájtokban. |
DELETE
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
numAddedFiles |
A hozzáadott fájlok száma. Nincs megadva a tábla partícióinak törlésekor. |
numRemovedFiles |
Az eltávolított fájlok száma. |
numDeletedRows |
Az eltávolított sorok száma. Nincs megadva a tábla partícióinak törlésekor. |
numCopiedRows |
A fájlok törlése során másolt sorok száma. |
executionTimeMs |
A teljes művelet végrehajtásához szükséges idő. |
scanTimeMs |
A fájlok egyezések keresésére történő átvizsgálásához szükséges idő. |
rewriteTimeMs |
A egyeztetett fájlok újraírásához szükséges idő. |
TRUNCATE
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
numRemovedFiles |
Az eltávolított fájlok száma. |
executionTimeMs |
A teljes művelet végrehajtásához szükséges idő. |
MERGE
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
numSourceRows |
A forrásadatkeret sorainak száma. |
numTargetRowsInserted |
A céltáblába beszúrt sorok száma. |
numTargetRowsUpdated |
A céltáblában frissített sorok száma. |
numTargetRowsDeleted |
A céltáblában törölt sorok száma. |
numTargetRowsCopied |
A másolt célsorok száma. |
numOutputRows |
A kiírt sorok teljes száma. |
numTargetFilesAdded |
A nyelőhöz (célhoz) hozzáadott fájlok száma. |
numTargetFilesRemoved |
A célhelyről eltávolított fájlok száma. |
executionTimeMs |
A teljes művelet végrehajtásához szükséges idő. |
scanTimeMs |
A fájlok egyezések keresésére történő átvizsgálásához szükséges idő. |
rewriteTimeMs |
A egyeztetett fájlok újraírásához szükséges idő. |
UPDATE
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
numAddedFiles |
A hozzáadott fájlok száma. |
numRemovedFiles |
Az eltávolított fájlok száma. |
numUpdatedRows |
A frissített sorok száma. |
numCopiedRows |
A fájlok frissítése során átmásolt sorok száma. |
executionTimeMs |
A teljes művelet végrehajtásához szükséges idő. |
scanTimeMs |
A fájlok egyezések keresésére történő átvizsgálásához szükséges idő. |
rewriteTimeMs |
A egyeztetett fájlok újraírásához szükséges idő. |
FSCK
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
numRemovedFiles |
Az eltávolított fájlok száma. |
CONVERT
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
numConvertedFiles |
A konvertált Parquet-fájlok száma. |
OPTIMIZE
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
numAddedFiles |
A hozzáadott fájlok száma. |
numRemovedFiles |
Az optimalizált fájlok száma. |
numAddedBytes |
A tábla optimalizálása után hozzáadott bájtok száma. |
numRemovedBytes |
Az eltávolított bájtok száma. |
minFileSize |
A tábla optimalizálása után a legkisebb fájl mérete. |
p25FileSize |
A tábla optimalizálása után a 25. percentilis fájl mérete. |
p50FileSize |
A tábla optimalizálása után a fájl középmérete. |
p75FileSize |
A táblázat optimalizálása után a 75. percentilisfájl mérete. |
maxFileSize |
A legnagyobb fájl mérete a tábla optimalizálása után. |
CLONE
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
sourceTableSize |
A forrástábla bájtban megadott mérete a klónozott verzióban. |
sourceNumOfFiles |
A forrástáblában lévő fájlok száma a klónozott verzióban. |
numRemovedFiles |
Az előző tábla lecserélése esetén a céltáblából eltávolított fájlok száma. |
removedFilesSize |
A céltáblából eltávolított fájlok bájtban megadott teljes mérete, ha egy korábbi táblát lecseréltek. |
numCopiedFiles |
Az új helyre másolt fájlok száma. 0 a sekély klónok esetében. |
copiedFilesSize |
Az új helyre másolt fájlok bájtban megadott teljes mérete. 0 a sekély klónok esetében. |
RESTORE
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
tableSizeAfterRestore |
A tábla mérete bájtban a visszaállítás után. |
numOfFilesAfterRestore |
A táblában lévő fájlok száma a visszaállítás után. |
numRemovedFiles |
A visszaállítási művelet által eltávolított fájlok száma. |
numRestoredFiles |
A visszaállítás eredményeként hozzáadott fájlok száma. |
removedFilesSize |
A visszaállítás által eltávolított fájlok bájtban megadott mérete. |
restoredFilesSize |
A visszaállítás által hozzáadott fájlok bájtban megadott mérete. |
VACUUM
A művelethez a következő metrikák érhetők el:
| A metrika elnevezése | Description |
|---|---|
numDeletedFiles |
A törölt fájlok száma. |
numVacuumedDirectories |
A kiürített könyvtárak száma. |
numFilesToDelete |
A törölni kívánt fájlok száma. |
A művelet típusának OPTIMIZE azonosítása
Az automatikus tömörítés, a folyadékklaszterezés és a Z-rendezés mind OPTIMIZE műveletként jelennek meg a táblatörténetben. Annak megállapításához, hogy melyik futott le, vizsgálja meg a(z) operationParameters oszlopot.
Egy tábla előzményeinek minden OPTIMIZE műveletének besorolásához futtassa a következőt:
SELECT
version,
timestamp,
CASE
WHEN operationParameters.clusterBy IS NOT NULL AND operationParameters.clusterBy <> '[]' THEN 'Liquid clustering'
WHEN operationParameters.zOrderBy IS NOT NULL AND operationParameters.zOrderBy <> '[]' THEN 'Z-ordering'
WHEN operationParameters.auto = 'true' THEN 'Auto compaction'
ELSE 'Manual OPTIMIZE'
END AS optimize_type,
operationParameters.auto AS is_auto_compaction,
operationParameters.clusterBy AS cluster_by,
operationParameters.zOrderBy AS z_order_by,
operationMetrics.numRemovedFiles AS files_compacted,
operationMetrics.numAddedFiles AS files_added,
operationMetrics.numRemovedBytes AS bytes_removed,
operationMetrics.numAddedBytes AS bytes_added
FROM (DESCRIBE HISTORY table_name)
WHERE operation = 'OPTIMIZE'
ORDER BY version DESC;
Az alábbi szakaszok részletesen ismertetik az egyes operationParameters értékeket.
Automatikus tömörítés
Az automatikus tömörítés a auto paramétert true értékre állítja. Azure Databricks automatikus tömörítést aktivál az írás után. Ha a(z) auto értéke false, egy felhasználó vagy egy ütemezett feladat lefuttatta a OPTIMIZE parancsot.
Egy automatikus tömörítési művelet például a következőket mutatja:
operationParameters: {
"auto": "true"
}
Az automatikus tömörítésről további információt az Automatikus tömörítés című témakörben talál.
Folyékony fürtözés
A dinamikus fürtözés a clusterBy paramétert a fürtözési oszlopok neveivel tölti ki. Az üres clusterBy tömb ([]) csak a fájl tömörítését jelzi.
Például az az művelet, amely az adatokat a date és region oszlopok szerint csoportosította, a következőt mutatja:
operationParameters: {
"clusterBy": "[\"date\",\"region\"]"
}
A liquid clusteringgel kapcsolatos további információkért lásd: A liquid clustering használata táblák esetén.
Z-rendelés
A Z-ordering során a zOrderBy paraméter a Z-order oszlopneveivel töltődik fel. Egy üres zOrderBy tömb ([]) azt jelzi, hogy a művelet nem alkalmazta a Z-rendezést.
Például egy olyan művelet, amely Z-rendezést alkalmazott az oszlopon, date a következőt mutatja:
operationParameters: {
"zOrderBy": "[\"date\"]"
}
Művelet hatóköre
A predicate paraméter azt jelzi, hogy a művelet a teljes táblán futott-e, vagy csak egy része:
- Az üres
predicatetömb ([]) azt jelenti, hogy a művelet a teljes táblán futott. - A kitöltött
predicatetömb azt jelenti, hogy egy célzottOPTIMIZE table_name WHERE <partition_predicate>parancs csak a predikátumnak megfelelő partíciókon fut.
Például a year = 2024 elemnek megfelelő partíciókat célzó művelet a következőket mutatja:
operationParameters: {
"predicate": "[\"'year = 2024\"]"
}
Időutazás
Az időbeli visszatekintés lehetővé teszi a korábbi táblaverziók lekérdezését az időbélyeg vagy a táblaverzió alapján, ahogy az a tranzakciónaplóban rögzítve van. Az időutazást az alábbi alkalmazásokhoz használhatja:
- Elemzések, jelentések vagy kimenetek újbóli létrehozása, például egy gépi tanulási modell kimenete. Ez hasznos lehet a hibakereséshez vagy a naplózáshoz, különösen a szabályozott iparágakban.
- Összetett időbeli lekérdezések írása.
- Az adatok hibáinak kijavítása.
- Pillanatkép-elkülönítés biztosítása lekérdezések készletéhez a gyorsan változó táblákhoz.
Note
A Databricks Runtime 18.0-s vagy újabb verzióiban az időutazási lekérdezések le lesznek tiltva, ha a deletedFileRetentionDuration táblatulajdonságnál régebbi verziót kérnek (alapértelmezés szerint 7 nap). A Unity Catalog által felügyelt táblák esetében ez a Databricks Runtime 12.2 és újabb verziókra vonatkozik.
Időutazás szintaxisa
Egy időutazással rendelkező táblát úgy kérdezhet le, hogy hozzáad egy záradékot a táblanév specifikációja után.
-
timestamp_expressionaz alábbiak bármelyike lehet:-
'2018-10-18T22:15:12.013Z', azaz olyan karakterlánc, amely időbélyeggé konvertálható. cast('2018-10-18 13:36:32 CEST' as timestamp)-
'2018-10-18', azaz dátumsztring current_timestamp() - interval 12 hoursdate_sub(current_date(), 1)- Bármely más kifejezés, amely időbélyegbe van öntve vagy átalakítható
-
-
versionegy hosszú érték, amely a következő kimenetbőlDESCRIBE HISTORY table_speckérhető le: .
Sem a timestamp_expression, sem a version nem lehet al-lekérdezés.
A rendszer csak dátum- vagy időbélyeg-sztringeket fogad el. Például: "2019-01-01" és "2019-01-01T00:00:00.000Z". Lásd például a következő kódot:
SQL
SELECT * FROM people10m TIMESTAMP AS OF '2018-10-18T22:15:12.013Z';
SELECT * FROM people10m VERSION AS OF 123;
Python
df1 = spark.read.option("timestampAsOf", "2019-01-01").table("people10m")
df2 = spark.read.option("versionAsOf", 123).table("people10m")
A @ szintaxis használatával megadhatja az időbélyeget vagy a verziót a táblanév részeként. Az időbélyegnek formátumban yyyyMMddHHmmssSSS kell lennie. Megadhatja a verziót a használatával @v. Lásd például a következő kódot:
SQL
-- Timestamp version
SELECT * FROM people10m@20190101000000000
-- Version number
SELECT * FROM people10m@v123
Python
# Timestamp version
spark.read.table("people10m@20190101000000000")
# Version number
spark.read.table("people10m@v123")
Adatmegőrzés konfigurálása időutazási lekérdezésekhez
Az előző táblaverzió lekérdezéséhez a naplót és az adott verzió adatfájljait is meg kell őriznie:
- Az adatfájlok törlésre kerülnek, amikor
VACUUMfuttatása egy táblán történik. - A naplófájlok automatikusan törlődnek a táblaverziók ellenőrzése után.
A táblák adatmegőrzési küszöbértékének növeléséhez konfigurálnia kell a következő táblázattulajdonságokat, és a következőre kell váltania <format>deltaiceberg:
-
<format>.logRetentionDuration = "interval <interval>": azt határozza meg, hogy a tábla előzményei mennyi ideig legyenek megtartva. Az alapértelmezett érték ainterval 30 days.- A Databricks Runtime 18.0-s vagy újabb verzióban a
logRetentionDuration-nek nagyobbnak vagy egyenlőnek kell lennie, mintdeletedFileRetentionDuration. A Unity Catalog által felügyelt táblák esetében ez a Databricks Runtime 12.2 és újabb verziókra vonatkozik.
- A Databricks Runtime 18.0-s vagy újabb verzióban a
-
<format>.deletedFileRetentionDuration = "interval <interval>": meghatározza az aktuális táblaverzióban már nem hivatkozott adatfájlok eltávolítására használt küszöbértéketVACUUM. Az alapértelmezett érték ainterval 7 days.
Ha például 30 nap előzményadatokat szeretne elérni, állítsa be delta.deletedFileRetentionDuration = "interval 30 days"az alapértelmezett beállításnak delta.logRetentionDurationmegfelelőt.
Important
Az adatmegőrzési küszöbérték növelése a tárolási költségek emelkedését okozhatja, mivel a rendszer több adatfájlt tart fenn.
A táblatulajdonságokat a tábla létrehozásakor vagy utasítással ALTER TABLE is megadhatja. Lásd Táblázatulajdonságok hivatkozása.
Időutazási példák
A tábla véletlen törléseinek helyreállítása a(z) 111 felhasználó számára:
INSERT INTO my_table
SELECT * FROM my_table TIMESTAMP AS OF date_sub(current_date(), 1)
WHERE userId = 111
Tábla véletlen helytelen frissítésének kijavítása:
MERGE INTO my_table target
USING my_table TIMESTAMP AS OF date_sub(current_date(), 1) source
ON source.userId = target.userId
WHEN MATCHED THEN UPDATE SET *
Az elmúlt héten hozzáadott új ügyfelek számának lekérdezése:
SELECT
(
SELECT count(distinct userId)
FROM my_table
)
-
(
SELECT count(distinct userId)
FROM my_table TIMESTAMP AS OF date_sub(current_date(), 7)
) AS new_customers
A tranzakciós napló ellenőrzőpontjai
A tranzakciónapló JSON-fájlként rögzíti a táblaverziókat a tranzakciónapló könyvtárában a táblaadatok mellett.
Az ellenőrzőpont-lekérdezés optimalizálása érdekében a táblaverziók parquet ellenőrzőpontfájlokra vannak összesítve, ami javítja a teljesítményt azáltal, hogy nem szükséges elolvasni a táblaelőzmények összes JSON-verzióját. A felhasználóknak nem kell közvetlenül használniuk az ellenőrzőpontokat.
Az Azure Databricks optimalizálja az ellenőrzőpontok gyakoriságát az adatmérethez és a számítási feladathoz. Az ellenőrzőpont gyakorisága értesítés nélkül változhat.
Tábla visszaállítása korábbi állapotba
RESTORE A parancs használatával visszaállíthat egy táblát egy korábbi verzióra vagy időbélyegre, beleértve az alábbi eseteket is:
- Már visszaállított táblát is lehet újra visszaállítani.
- A klónozott táblák visszaállíthatók.
Vegye figyelembe a következő követelményeket:
- Egy tábla visszaállításához rendelkeznie kell a táblához tartozó
MODIFYjogosultsággal. - Az adatfájlok kézi törlése vagy a(z)
VACUUMáltali törlése után nem állíthat vissza egy táblát egy olyan korábbi verzióra, amely ezekre a fájlokra hivatkozik. Ennek a verziónak a részleges visszaállítása akkor is lehetséges, haspark.sql.files.ignoreMissingFilesbe van állítvatrue. - Az időbélyegek szerinti visszaállításhoz használja a formátumokat
yyyy-MM-dd HH:mm:ssvagyyyyy-MM-dda .
RESTORE TABLE target_table TO VERSION AS OF <version>;
RESTORE TABLE target_table TO TIMESTAMP AS OF <timestamp>;
A szintaxis részleteiért lásd: RESTORE.
Streamelési viselkedés
A visszaállítás adatmódosítási művelet, amely duplikált adatokat eredményezhet az alsóbb rétegbeli számítási feladatokhoz. A RESTORE parancs által hozzáadott naplóbejegyzések tartalmazzák, hogy a dataChange értéke igaz.
Az alsóbb rétegbeli számítási feladatok, például a tábla frissítéseit feldolgozó strukturált streamelési feladatok esetében a visszaállítási művelet által hozzáadott adatváltozási naplóbejegyzések új adatfrissítéseknek minősülnek, és a feldolgozásuk duplikált adatokat eredményezhet.
Például:
| táblázat verzió | Operation | Naplófrissítések | Adatváltozási naplófrissítések rekordjai |
|---|---|---|---|
| 0 | INSERT |
AddFile(/path/to/file-1, dataChange = true) |
(név = Viktor, kor = 29), (név = György, kor = 55) |
| 1 | INSERT |
AddFile(/path/to/file-2, dataChange = true) |
(név = György, kor = 39) |
| 2 | OPTIMIZE |
AddFile(/path/to/file-3, dataChange = false), RemoveFile(/path/to/file-1), RemoveFile(/path/to/file-2) |
Nincsenek rekordok.
OPTIMIZE a tömörítés nem módosítja a táblában lévő adatokat. |
| 3 | RESTORE(version=1) |
RemoveFile(/path/to/file-3), AddFile(/path/to/file-1, dataChange = true), AddFile(/path/to/file-2, dataChange = true) |
(név = Viktor, kor = 29), (név = György, kor = 55), (név = György, kor = 39) |
Az előző példában a parancs olyan RESTORE frissítéseket eredményez, amelyek a tábla 0- és 1-es verziójának olvasásakor korábban megjelentek. Ha egy streamelési lekérdezés újra felolvassa ezt a táblát, a rendszer ezeket a fájlokat újonnan hozzáadott adatoknak tekinti, és újra feldolgozzák őket.
Metrikák visszaállítása
A befejezést követően RESTORE a következő metrikákat egy egysoros DataFrame-ként közli:
table_size_after_restore: A tábla mérete a visszaállítás után.num_of_files_after_restore: A táblában lévő fájlok száma a visszaállítás után.num_removed_files: A táblából eltávolított (logikailag törölt) fájlok száma.num_restored_files: A fájlok száma, amelyeket visszagörgetés során állítottak vissza.removed_files_size: A táblából eltávolított fájlok teljes mérete bájtban.restored_files_size: A visszaállított fájlok teljes mérete bájtban.
Az utolsó véglegesítési verzió megkeresése
Ha le szeretné kérdezni az aktuális SparkSession véglegesítés verziószámát az összes szálon és táblán, kérje le az SQL-konfigurációt spark.databricks.<format>.lastCommitVersionInSession. Cserélje le a <format> elemet a táblázat formátumától függően vagy delta elemre, vagy iceberg elemre.
Például:
SQL
SET spark.databricks.delta.lastCommitVersionInSession
Python
spark.conf.get("spark.databricks.delta.lastCommitVersionInSession")
Scala
spark.conf.get("spark.databricks.delta.lastCommitVersionInSession")
Ha nem történt módosítás SparkSession által véglegesítés formájában, akkor a kulcs lekérdezése üres értéket ad vissza.
Note
Ha ugyanazt SparkSession több szálon is megosztja, az hasonló a változók több szálon való megosztásához. A konfigurációs érték egyidejű frissítései során versenyhelyzetek fordulhatnak elő.