---
title: "Jedna kopia danych, trzy formaty: co XTable i UniForm zmieniają w planie testów"
url: "https://predictes.com/pl/blog/jedna-kopia-danych-trzy-formaty-co-xtable-i-uniform-zmieniaja-w-planie-testow"
description: "XTable i Delta UniForm pozwalają czytać jeden zbiór plików Parquet jako Delta, Iceberg i Hudi. To usuwa kopię i dodaje testy, które musi objąć wasz AI SDLC."
---

# Jedna kopia danych, trzy formaty: co XTable i UniForm zmieniają w planie testów

15 października 2026·4 min czytania·predictes

Centrala prowadzi lakehouse na Delta Lake, pod Databricks i Microsoft Fabric. Spółka przejęta dwa lata temu pracuje na Snowflake i czyta Iceberg. Finanse grupy potrzebują jednej liczby marży, więc nocne zadanie kopiuje tabele sprzedaży z jednej strony na drugą. Osiemnaście miesięcy później są dwie marże, arkusz uzgodnień z nazwanym właścicielem i po jednym asystencie AI z każdej strony, który z przekonaniem podaje własną liczbę.

Kopia nigdy nie była problemem danych. Była problemem metadanych i to właśnie sprawia, że da się go rozwiązać bez przenoszenia jednego bajta.

## Dlaczego te same pliki mogą być trzema tabelami

Każdy otwarty format tabeli przechowuje dane tak samo: jako niezmienne pliki Parquet na magazynie obiektowym. Różnią się metadane obok nich. Delta Lake prowadzi log transakcji z commitów JSON, Iceberg drzewo migawki, listy manifestów i manifestów, Hudi oś czasu. Tabelą są metadane; pliki są wspólnym gruntem. Tło jest w tekście [Baza operacyjna i lakehouse](https://predictes.com/pl/blog/baza-operacyjna-i-lakehouse-dwie-pamieci-systemu-ai-native).

Przetłumaczenie tabeli z jednego formatu na drugi oznacza więc zapisanie drugiego kompletu metadanych wskazującego na te same pliki: tę samą listę plików, ten sam schemat, te same wartości partycji i statystyki, wyrażone w strukturze drugiego formatu. Robią to dwa projekty.

**Apache XTable**, w inkubacji Apache Software Foundation, czyta metadane formatu źródłowego i zapisuje obok nich metadane jednego lub kilku formatów docelowych. Dokumentacja mówi wprost, że robi to [bez kopiowania ani przenoszenia plików danych](https://xtable.apache.org/). Działa jako narzędzie albo zadanie cykliczne, w trybie `FULL`, który odbudowuje metadane celu ze wszystkich plików, albo `INCREMENTAL`, który przenosi tylko różnicę. Aktualne wydanie to [0.4.0-incubating](https://github.com/apache/incubator-xtable/releases), które dodało cel Delta Kernel oraz Paimon i Parquet jako źródła (sprawdzono 21.10.2026). Udokumentowane ograniczenia: tabele Merge-on-Read w Hudi i Icebergu oraz tabele Delta z wektorami usunięć [nie są obsługiwane](https://xtable.apache.org/docs/how-to).

**Delta UniForm** robi to samo od środka Delta Lake. Z włączoną funkcją każdy commit generuje też metadane Iceberg, a w wersji zapoznawczej Hudi, asynchronicznie po commicie Delta. [Dokumentacja Delta](https://docs.delta.io/latest/delta-uniform.html) wymienia wymagania: mapowanie kolumn, wersja czytelnika 2 i pisarza 7, `IcebergCompatV2`, Delta 3.1 lub nowsza dla Iceberga i 3.2 dla Hudi. Widoki Iceberg i Hudi są tylko do odczytu. Wektory usunięć nie są przenoszone do czytelnika Iceberg v2, typ `VOID` nie jest obsługiwany, a Change Data Feed nie jest udostępniany przez Iceberg; Databricks dokumentuje, że [`REORG ... UPGRADE UNIFORM`](https://docs.databricks.com/aws/en/delta/uniform) z tego powodu usuwa wektory usunięć.

Oba podejścia zostawiają jeden format jako format zapisu, ten, do którego się pisze. Pozostałe są jego widokami, odświeżanymi z opóźnieniem.

Skopiować dane

-   –Nocne zadanie przepisuje pliki na drugą platformę
-   –Dwa zbiory plików, dwa rachunki za składowanie, dwa zegary świeżości
-   –Dwie tabele, które się rozjeżdżają, i uzgodnienie, które ktoś prowadzi
-   –Uprawnienia ustawiane dwa razy, zwykle inaczej
-   –Każda zmiana schematu w dwóch miejscach

Przetłumaczyć metadane

-   →Jeden zbiór plików Parquet, jeden format zapisu
-   →Drugi komplet metadanych zapisany obok (XTable) albo przez samego pisarza (UniForm)
-   →Jedna tabela, czytana natywnie przez oba silniki, ze znanym opóźnieniem
-   →Uprawnienia nadal per katalog, i to jest część do przetestowania
-   →Nieobsługiwane funkcje wykrywa test kontraktu, nie użytkownik

Prawa kolumna usuwa kopię. Nie usuwa katalogu i dodaje testy.

## Co zmienia się w planie testów

Skopiowaną tabelę testuje się uzgodnieniem: obie strony porównuje się po ładowaniu. Przetłumaczona tabela to jedna tabela widziana dwa razy i tryby awarii się przesuwają. W dostarczaniu opartym na specyfikacji plan testów jest częścią specyfikacji, więc to są testy, które piszemy, zanim ruszy pierwsza synchronizacja.

**Równoważność między formatami.** Ta sama tabela czytana przez format zapisu i przez przetłumaczony widok: liczby wierszy, stały zestaw agregatów na partycję, schemat z typami i ostatni commit, który widzi każda strona. Uruchamiane po każdej synchronizacji i według harmonogramu. Rozbieżność jest defektem potoku, nie pozycją do uzgodnienia.

**Opóźnienie świeżości.** Przetłumaczony widok jest z założenia za zapisem: XTable o swój harmonogram, UniForm o asynchroniczne generowanie, wirtualizacja OneLake w Fabric o to, co Microsoft dokumentuje jako [od pięciu sekund do dwóch minut](https://learn.microsoft.com/en-us/fabric/onelake/onelake-iceberg-tables) dla tabel poniżej pięciu tysięcy commitów. Kontrakt określa opóźnienie obiecane odbiorcy; test je mierzy i pada, gdy obietnica jest złamana. Asystent, który odpowiada z widoku Iceberg, musi wiedzieć, a najlepiej mówić, jak stary jest jego widok.

**Kontrakty funkcji.** Każde udokumentowane ograniczenie staje się testem. Tabela z włączonymi wektorami usunięć, kolumną `VOID`, układem Merge-on-Read albo zależnością od Change Data Feed pada na teście kontraktu, zanim dotrze do kroku tłumaczenia, z komunikatem, który nazywa ograniczenie. Te testy są tanie w pisaniu i drogie w braku.

**Zgodność uprawnień.** Tłumaczenie metadanych nie mówi nic o tym, kto może czytać. Tabela Delta pod Unity Catalog i jej widok Iceberg pod katalogiem Snowflake albo Polaris mają osobne nadania. Test wylicza podmioty po obu stronach i pada na różnicy, której specyfikacja nie dopuściła.

**Wycofanie widoku.** Jeśli synchronizacja wytworzy błędną migawkę Iceberg, plan testów mówi, jak przywrócić widok do poprzedniej i jak odbiorcy dowiadują się, że to nastąpiło.

## Kto jest właścicielem formatu zapisu

Tłumaczenie usuwa kopię i zostawia decyzję: w którym formacie się pisze. Ta decyzja wiąże silniki, które mogą pisać, katalog, który zarządza, i funkcje, z których platforma może korzystać, nie psując widoku. To decyzja architektoniczna z nazwanym właścicielem, nie flaga konfiguracji.

Kontekst rynkowy ma tu znaczenie tylko jako fakt. Databricks [ogłosił przejęcie Tabular](https://www.databricks.com/company/newsroom/press-releases/databricks-agrees-acquire-tabular-company-founded-original-creators) w czerwcu 2024 roku, z deklarowanym krótkoterminowym celem zgodności Delta i Iceberga przez UniForm. Microsoft dokumentuje wirtualizację tabel Delta jako Iceberg w OneLake oraz skróty Iceberg. [Tableflow](https://docs.confluent.io/cloud/current/topics/tableflow/overview.html) Confluenta materializuje tematy Kafki jako tabele Iceberg lub Delta. Kierunek jest taki, że platformy czytają wzajemnie swoje formaty; własność zapisywanego formatu i katalogu nie przesunęła się.

## Gdzie pomagają agenci, a gdzie decyduje architekt

Opisane wyżej zestawy testów są powtarzalne, parametryzowane i liczne, czyli dokładnie takie, jakie agenci kodujący dobrze wytwarzają ze specyfikacji: zapytania równoważności per tabela, monitory opóźnienia, kontrole kontraktów wygenerowane z udokumentowanych ograniczeń, porównanie uprawnień. Agent potrafi też przeczytać log nieudanej synchronizacji i nazwać funkcję, która ją zepsuła. Pozwalamy agentom to wszystko naszkicować i odbieramy, uruchamiając na prawdziwych tabelach.

Decyzje zostają przy ludziach: który format jest formatem zapisu; czy tabela może włączyć funkcję, której widok nie przeniesie; jakie opóźnienie obiecano każdemu odbiorcy; czy platforma spółki zależnej jest widokiem, czy drugim pisarzem; i kiedy przetłumaczony widok jest na tyle dobry, by wyłączyć kopię. Wyłączenie jest momentem, w którym całe przedsięwzięcie się zwraca, i powinno nastąpić dopiero wtedy, gdy testy równoważności przechodzą na tyle długo, że nikt już nie czyta arkusza uzgodnień.

## Jak wygląda dobry wynik

Jeden zbiór plików dla tabel sprzedaży grupy, zapisywany w jednym formacie przez jedną platformę. Silnik spółki zależnej czyta je natywnie, z opóźnieniem, które jest określone i mierzone. Nocna kopia i jej uzgodnienie zniknęły. Każde ograniczenie tłumaczenia jest testem, który uruchamia się, zanim zauważy je użytkownik. Oba asystenty podają tę samą marżę, a zapytane, jak świeża jest, odpowiadają.

## Nasza część

W [wytwarzaniu agentów AI opartym na specyfikacji](https://predictes.com/pl/services/ai-agents-spec-driven-development) najpierw piszemy specyfikację, razem z nią plan testów, a agentom pozwalamy wygenerować zestawy równoważności, opóźnienia i kontraktów, które czynią przetłumaczoną tabelę godną zaufania, odebrane na waszych prawdziwych tabelach, zanim kopia zostanie wyłączona. Nie odsprzedajemy platform. Więcej o predictes na [stronie głównej](https://predictes.com/pl).

-   Apache XTable
-   Delta UniForm
-   formaty tabel
-   plan testów

## Czytaj dalej

-   [Dostawca wycofał model. Co dalej z Waszym systemem](https://predictes.com/pl/blog/dostawca-wycofal-model-co-dalej-z-waszym-systemem)
-   [Baza operacyjna i lakehouse: dwie pamięci systemu AI-native](https://predictes.com/pl/blog/baza-operacyjna-i-lakehouse-dwie-pamieci-systemu-ai-native)