Ślad audytu to tabela: Delta Lake, Iceberg czy Hudi

Audytor zadaje proste pytanie o płatność zatwierdzoną w marcu: co widziała na ekranie osoba, która ją zatwierdziła, i co przeczytał agent, który ją przygotował, zanim złożył propozycję? W większości firm odpowiedź jest rekonstrukcją. Ktoś wyciąga kopię zapasową, ktoś inny przeszukuje skrzynkę, a wynikiem jest wykształcone przypuszczenie o stanie, którego już nie ma.
W Hurukanie każda propozycja agenta i każda decyzja człowieka jest zdarzeniem w zapisie firmy, a zapis jest zaprojektowany tak, żeby to pytanie miało zwykłą odpowiedź: wersję tabel z tamtej chwili. Ta własność nie bierze się z plików. Bierze się z formatu tabeli nad nimi. Ten tekst jest o tym, co trzy otwarte formaty tabel robią z tym pytaniem i jak między nimi wybierać. Warstwa Data jest w budowie; poniżej opisujemy, jak ją projektujemy. Uzasadnienie, po co w ogóle zapis, jest w tekście o stanie bieżącym i zapisie.
Czego ślad audytu wymaga od tabeli
Plików w zapisie nigdy się nie edytuje. Zmiana dopisuje nowe pliki i nową wersję metadanych tabeli, która mówi, które pliki od teraz się liczą. Dla audytu wynikają z tego trzy rzeczy.
Każda wersja ma adres. „Tabela na stan z 12 marca, godzina 14:02” musi być poprawnym zapytaniem, a nie zadaniem odtworzenia kopii. W formatach niżej to podróż w czasie i to ona stoi za pytaniem „co widział agent”.
Każda wersja ma autora. Metadane zmiany muszą nieść, kto albo co ją wykonało: człowiek, agent działający na zatwierdzeniu człowieka albo zadanie systemowe, takie jak kompaktowanie. Hurukan zapisuje aktora we własnym rejestrze decyzji, ale wersja tabeli jest dowodem, że rejestr zgadza się z danymi.
Stare wersje wygasają celowo, nie przypadkiem. Trzymanie każdej wersji na zawsze kosztuje; usuwanie ich to decyzja o retencji, a przy danych osobowych o usunięciu. Ta decyzja należy do człowieka, a format tabeli ma ją uczynić jawną.
Trzy sposoby prowadzenia planu
Każdy format prowadzi plan tego, które pliki składają się na tabelę. W tym planie mieszka audyt.
Delta Lake prowadzi log: katalog _delta_log/ z jednym plikiem JSON na commit, nazwanym
dwudziestocyfrowym numerem wersji, z akcjami takimi jak add, remove, metaData i protocol,
oraz z okresowymi punktami kontrolnymi w Parquet, żeby czytelnik nie odtwarzał całej historii.
Definiuje go protokół; bieżące
wydanie to 4.4.0 (sprawdzono 21.10.2026). Retencja
logu domyślnie wynosi 30 dni, a VACUUM 7 dni, co znaczy, że podróż w czasie sięga tylko tak
daleko, jak pozwalają te dwa ustawienia.
Apache Iceberg prowadzi drzewo: plik metadanych tabeli wskazuje migawkę, migawka listę manifestów, manifesty pliki danych i pliki usunięć wraz ze statystykami. Commit to atomowa podmiana wskaźnika na plik metadanych, a podmiana odbywa się w katalogu. Specyfikacja jest w wersji 3, z wektorami usunięć, pochodzeniem wierszy i typem VARIANT; bieżące wydanie to 1.12.0 (sprawdzono 21.10.2026).
Apache Hudi prowadzi oś czasu: każda akcja na tabeli — commit, kompaktowanie, czyszczenie, wycofanie, przywrócenie — jest chwilą ze stanem, a historia osi czasu jest archiwizowana w strukturze LSM. Rekordy mają klucze i indeks, więc zmiana jednego klienta dotyka jednej grupy plików, a nie partycji. Tabele są typu Copy-on-Write albo Merge-on-Read, a wydanie 1.2.1 dodało wersję tabeli 9 (sprawdzono 21.10.2026). Stany opisuje dokumentacja osi czasu.
Wszystkie trzy odpowiadają audytorowi. Różnica polega na tym, gdzie odpowiedź jest przechowywana i kto jeszcze może ją przeczytać.
Wybieraj według katalogu, nie listy funkcji
Listy funkcji się zbiegły: transakcje, podróż w czasie, ewolucja schematu, usunięcia na poziomie wiersza i zapisy strumieniowe są w każdym z nich. Nie zbiegło się miejsce, w którym ogłasza się bieżącą wersję tabeli, a to w tym miejscu rozstrzyga się suwerenność.
Dla Delta Lake jest nim sam katalog logu, więc każdy silnik, który czyta magazyn, znajdzie bieżącą wersję. W praktyce katalogiem wokół niego jest Unity Catalog albo, w Microsoft Fabric, OneLake, który według dokumentacji Microsoft przechowuje tabele jako Delta Parquet.
Dla Iceberga jest nim wskaźnik w katalogu, a katalog mówi otwartą specyfikacją REST. Implementuje ją Apache Polaris, projekt najwyższego poziomu od lutego 2026 z wydaniem 1.8.0; przez nią tabele Iceberg czytają i zapisują Snowflake, AWS S3 Tables, katalog lakehouse Google i Databricks (sprawdzono 21.10.2026).
Dla Hudi jest nim oś czasu w magazynie, czytana natywnie przez Spark, Flink, Trino i Presto; inne platformy docierają do tabeli Hudi zwykle przez tłumaczenie metadanych.
Pytanie dla firmy nie brzmi więc „który format ma najlepszy audyt”. Brzmi: na czyjej infrastrukturze działa katalog, które silniki muszą czytać zapis i czy zapis można zabrać ze sobą, gdy zmieni się vendor. Odpowiedź Hurukana jest taka, że katalog i pliki działają na infrastrukturze, którą wybiera firma, jak opisano w bezpieczeństwie i suwerenności, a format wynika z silników, które firma już ma, a nie odwrotnie.
Co zostaje przy ludziach
Agenci są dobrzy w mechanicznej części warstwy Data: napiszą harmonogram kompaktowania, zadanie wygaszające stare migawki, zaproponują zmianę partycji, gdy zapytania zwolnią. Każda z tych rzeczy jest propozycją w skrzynce zatwierdzeń, z dołączonym uzasadnieniem, i każda zostaje zapisana po zatwierdzeniu. Trzech decyzji nigdy się nie deleguje.
Retencja i usuwanie. To, jak daleko sięga podróż w czasie, jest tym samym ustawieniem, co to, jak długo dane osobowe przetrwają żądanie usunięcia. Człowiek ustawia to per tabela i podpisuje.
Podniesienie protokołu. Włączenie nowszej funkcji tabeli może odciąć starszy silnik, który nadal czyta zapis. Zysk jest realny; tak samo czytelnik, który gaśnie. Człowiek to waży.
Sam format. Zmiana później jest możliwa, jak wyjaśnia następny tekst tej serii o XTable i UniForm, ale to projekt, a nie ustawienie.
Test, który możesz zrobić dziś
Weź jedną decyzję z ostatniego kwartału, o którą audytor mógłby realnie zapytać: podniesiony limit kredytowy, zatwierdzony dostawca, przyznany rabat. Spisz, wyłącznie z Twoich systemów, co widziała osoba decydująca w tamtej chwili. Policz systemy, które musiałeś otworzyć, i miejsca, w których musiałeś zgadywać. Ta liczba to odległość między Twoim obecnym zapisem a takim, którego ślad audytu jest tabelą.
- formaty tabel
- Delta Lake
- Apache Iceberg
- Apache Hudi
- ślad audytu