Udostępnij za pośrednictwem


Starsza wersja UniForm IcebergCompatV1

Ważne

Ta dokumentacja została wycofana i może nie zostać zaktualizowana. Produkty, usługi lub technologie wymienione w tej zawartości nie są już obsługiwane. Zobacz Przeczytaj Delta tables z klientami Iceberg.

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej w środowisku Databricks Runtime 13.2 lub nowszym.

Funkcja Delta Universal Format (UniForm) umożliwia odczyt Delta tables przy użyciu klientów czytnika Iceberg.

Aplikacja UniForm korzysta z faktu, że zarówno usługa Delta Lake, jak i Iceberg składają się z plików danych Parquet i warstwy metadanych. UniForm automatycznie generuje metadane Iceberg w trybie asynchronicznym, bez ponownego zapisywania danych, dzięki czemu klienci Iceberg mogą odczytywać Delta tables tak, jakby były Iceberg tables. Pojedyncza kopia plików danych obsługuje oba formaty.

Można skonfigurować połączenie zewnętrzne tak, aby Unity Catalog działało jako Iceberg catalog. Zobacz "Czytaj przy użyciu Unity Catalog Iceberg catalog punktu końcowego".

Uwaga

Generowanie metadanych UniForm jest uruchamiane asynchronicznie na obliczeniach używanych do zapisywania danych w usłudze Delta tables, co może zwiększyć użycie zasobów sterownika.

Wymagania

Aby włączyć aplikację UniForm, musisz spełnić następujące wymagania:

Włączanie funkcji Delta UniForm

Ważne

Włączenie funkcji Delta UniForm ustawia funkcję delta tableIcebergCompatV1, funkcję protokołu zapisu. Tylko klienci, którzy obsługują tę funkcję table, mogą zapisywać dane w tablesobsługującym UniForm. Aby z włączoną tą funkcją zapisać dane w usłudze Delta tables, musisz użyć środowiska Databricks Runtime 13.2 lub nowszego.

Możesz wyłączyć UniForm, odznaczając właściwość delta.universalFormat.enabledFormatstable. Nie można wyłączyć mapowania column po jego włączeniu, a uaktualnienia do wersji protokołu czytnika i zapisującego Delta Lake nie mogą zostać cofnięte.

Następująca właściwość table obsługuje UniForm dla Iceberg. iceberg jest jedyną prawidłową wartością.

'delta.universalFormat.enabledFormats' = 'iceberg'

Należy również włączyć column mapowanie i IcebergCompatV1, aby używać aplikacji UniForm. Są one set automatycznie, jeśli włączysz aplikację UniForm podczas tworzenia table, jak w poniższym przykładzie:

CREATE TABLE T(c1 INT) TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'iceberg');

Jeśli tworzysz nową table za pomocą instrukcji CTAS, musisz ręcznie określić mapowanie column, jak w poniższym przykładzie:

CREATE TABLE T
TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.universalFormat.enabledFormats' = 'iceberg')
AS
  SELECT * FROM source_table;

Jeśli zmieniasz istniejącą table, musisz określić wszystkie te właściwości, jak w poniższym przykładzie:

ALTER TABLE T SET TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV1' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Po pierwszym włączeniu funkcji UniForm rozpoczyna się asynchroniczne generowanie metadanych. To zadanie musi zostać ukończone, zanim klienci zewnętrzni będą mogli wykonywać zapytania dotyczące table przy użyciu platformy Iceberg. Zobacz Sprawdzanie stanu generowania metadanych góry lodowej.

Uwaga

Jeśli planujesz używać trybu BigQuery jako klienta czytnika góry lodowej, musisz setspark.databricks.delta.write.dataFilesToSubdir, aby true w usłudze Azure Databricks, aby spełnić wymagania bigquery dotyczące układu danych.

Zobacz Ograniczenia.

Kiedy UniForm generate ustawia metadane Góry Lodowej?

Usługa Azure Databricks wyzwala asynchronicznie generowanie metadanych góry lodowej po zakończeniu transakcji zapisu usługi Delta Lake przy użyciu tego samego obliczenia, które zakończyło transakcję delty. Możesz również ręcznie wyzwolić generowanie metadanych góry lodowej. Zobacz Ręczne wyzwalanie konwersji metadanych góry lodowej.

Aby uniknąć opóźnień zapisu związanych z generowaniem metadanych Iceberg, Delta tables z częstymi zatwierdzeniami może łączyć wiele zatwierdzeń Delta w jednym zatwierdzeniu Iceberg.

Usługa Delta Lake zapewnia, że w dowolnym momencie trwa tylko jeden proces generowania metadanych góry lodowej. Zatwierdzenia, które wyzwoliłyby drugi równoczesny proces generowania metadanych góry lodowej, zostaną pomyślnie zatwierdzony w funkcji Delta, ale nie będą wyzwalać asynchronicznego generowania metadanych góry lodowej. Zapobiega to kaskadowemu opóźnieniu generowania metadanych dla obciążeń z częstymi zatwierdzeniami (od sekund do minut między zatwierdzeniami).

Zobacz wersje Delta i Iceberg table.

Sprawdzanie stanu generowania metadanych góry lodowej

Aplikacja UniForm dodaje następujące pola do metadanych unity Catalog i Iceberg table w celu śledzenia stanu generowania metadanych:

Pole metadanych opis
converted_delta_version Najnowsza wersja Delta table, dla której pomyślnie wygenerowano metadane Iceberga.
converted_delta_timestamp Sygnatura czasowa najnowszego zatwierdzenia delty, dla którego metadane góry lodowej zostały pomyślnie wygenerowane.

W usłudze Azure Databricks możesz przejrzeć te pola metadanych przy użyciu narzędzia Catalog Explorer. Te pola i values są również zwracane podczas korzystania z interfejsu API REST w celu gettable.

Zapoznaj się z dokumentacją klienta Iceberg Reader, aby dowiedzieć się, jak przeglądać właściwości table poza usługą Azure Databricks. W przypadku systemu operacyjnego Apache Spark można zobaczyć te właściwości przy użyciu następującej składni:

SHOW TBLPROPERTIES <table-name>;

Ręczne wyzwalanie konwersji metadanych góry lodowej

Możesz ręcznie wyzwolić generowanie metadanych Iceberg dla najnowszej wersji Delta table. Ta operacja jest uruchamiana synchronicznie, co oznacza, że po zakończeniu zawartość table dostępna w Iceberg odzwierciedla najnowszą wersję table delty dostępną w momencie rozpoczęcia procesu konwersji.

Ta operacja nie powinna być konieczna w normalnych warunkach, ale może pomóc, jeśli wystąpią następujące kwestie:

  • Klaster kończy się, zanim automatyczne generowanie metadanych zakończy się pomyślnie.
  • Błąd lub niepowodzenie zadania przerywa generowanie metadanych.
  • Klient, który nie obsługuje generowania metadanych UniForm Iceberg, zapisuje do Delta table.

Użyj następującej składni, aby ręcznie wyzwolić generowanie metadanych góry lodowej:

MSCK REPAIR TABLE <table-name> SYNC METADATA

Zobacz REPAIR TABLE.

Odczytywanie przy użyciu ścieżki JSON metadanych

Niektórzy klienci Iceberg wymagają wskazania ścieżki do wersjonowanych plików metadanych, aby zarejestrować zewnętrzną Iceberg tables. Za każdym razem, gdy UniForm konwertuje nową wersję Delta table na Iceberg, tworzy nowy plik JSON metadanych.

Klienci korzystający ze ścieżek JSON metadanych do konfigurowania góry lodowej obejmują bigquery. Aby uzyskać szczegółowe informacje o konfiguracji, zapoznaj się z dokumentacją klienta czytnika góry lodowej.

Delta Lake przechowuje metadane Iceberg w katalogu table przy użyciu następującego wzorca:

<table-path>/metadata/<version-number>-<uuid>.metadata.json

Ścieżkę tego pliku można znaleźć przy użyciu eksploratora Catalog. W przypadku tables z włączoną funkcją UniForm, szczegółowe informacje dotyczące delty table zawierają pole dla lokalizacji metadanych Iceberg.

Interfejs API REST umożliwia również get wszystkich szczegółów dotyczących table, w tym lokalizacji metadanych. Użyj następującego polecenia:

GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>

Odpowiedź zawiera następujące informacje:

{
    ...
          "delta_uniform_iceberg": {
              "metadata_location":  "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
    }
}

Ważne

Klienci czytnika Iceberg bazujący na ścieżkach mogą wymagać ręcznego aktualizowania i odświeżania ścieżek JSON dla metadanych, aby odczytać bieżące wersje table. Użytkownicy mogą napotkać błędy podczas wykonywania zapytań dotyczących Iceberg tables przy użyciu nieaktualnych wersji, ponieważ pliki danych Parquet są usuwane z Delty table przy użyciu VACUUM.

Odczyt przy użyciu punktu końcowego Catalog Iceberg catalog Unity

Niektórzy klienci Iceberg mogą łączyć się z Iceberg REST catalog. Unity Catalog zapewnia implementację tylko do odczytu interfejsu API REST catalog Iceberg dla Delta tables z włączoną funkcją UniForm przy użyciu punktu końcowego /api/2.1/unity-catalog/iceberg. Zobacz specyfikację interfejsu API REST Iceberg, aby uzyskać szczegółowe informacje na temat korzystania z tego interfejsu API REST.

Klienci znani z obsługi interfejsu API catalog Góry Lodowej obejmują platformy Apache Spark, Flink i Trino. Należy skonfigurować dostęp do podstawowego magazynu obiektów w chmurze zawierającego Delta table z włączoną funkcją UniForm. Aby uzyskać szczegółowe informacje o konfiguracji, zapoznaj się z dokumentacją klienta czytnika góry lodowej.

Musisz generate i skonfigurować osobisty token dostępu usługi Azure Databricks, aby umożliwić innym usługom łączenie się z platformą Unity Catalog. Zobacz Uwierzytelnianie dostępu do zasobów usługi Azure Databricks.

Poniżej przedstawiono przykład ustawień konfigurowania systemu operacyjnego Apache Spark w celu odczytania aplikacji UniForm jako góry lodowej:

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.unity"="org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.unity.catalog-impl": "org.apache.iceberg.rest.RESTCatalog",
"spark.sql.catalog.unity.uri": "<api-root>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.unity.token":"<your_personal_access_token>",
"spark.sql.catalog.unity.io-impl": "org.apache.iceberg.aws.s3.S3FileIO

Zastąp pełny adres URL obszaru roboczego, w którym wygenerowano osobisty token dostępu dla elementu <api-root>.

Uwaga

Podczas wykonywania zapytań dotyczących tables w środowisku Unity Catalog przy użyciu tej metody identyfikatory obiektów używają następującego wzorca:

unity.<catalog-name>.<schema-name>.<table-name>

Ten wzorzec używa tej samej trójwarstwowej przestrzeni nazw występującej w Unity Catalog, ale dodaje prefiks unity.

wersje Delta i table Góry Lodowej

Zarówno usługa Delta Lake, jak i Iceberg umożliwiają wykonywanie zapytań dotyczących podróży w czasie przy użyciu table wersji lub sygnatur czasowych przechowywanych w metadanych table.

Ogólnie rzecz biorąc, wersje Iceberg i Delta table nie są wyrównane według znacznika czasu zatwierdzenia ani identyfikatora wersji. Jeśli chcesz sprawdzić, która wersja delty table odpowiada danej wersji góry lodowej table, możesz użyć odpowiednich właściwości tableset góry lodowej table. Zobacz Sprawdzanie stanu generowania metadanych góry lodowej.

Ograniczenia

Istnieją następujące ograniczenia:

  • Aplikacja UniForm nie działa na tables z włączonymi wektorami usuwania danych. Zobacz Co to są wektory usuwania?.
  • Delta tables z włączoną funkcją UniForm nie wspiera typów LIST, MAPi VOID.
  • Klienci góry lodowej mogą odczytywać tylko z uniformu. Zapisy nie są obsługiwane.
  • Klienci czytelników góry lodowej mogą mieć indywidualne ograniczenia, niezależnie od UniForm. Zapoznaj się z dokumentacją wybranego klienta.
  • Klienci czytników góry lodowej w wersji 1.2.0 i poniżej nie obsługują INT96 typu znacznika czasu napisanego przez platformę Apache Spark. Użyj następującego kodu w notesach, które zapisują do UniForm tables, aby uniknąć tego ograniczenia: spark.conf.set(“spark.sql.parquet.outputTimestampType”, “TIMESTAMP_MICROS”)
  • Publiczna wersja zapoznawcza punktu końcowego Unity Catalog Iceberg nie jest przeznaczona dla obciążeń produkcyjnych na dużą skalę. Jeśli przekroczysz próg 5 zapytań na sekundę, może wystąpić ograniczenie szybkości.

Następujące funkcje usługi Delta Lake działają dla klientów usługi Delta, gdy funkcja UniForm jest włączona, ale nie ma obsługi w środowisku Iceberg:

  • Zmienianie źródła danych
  • Udostępnianie różnicowe