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:
- table Delta musi być zarejestrowana w Unity Catalog. Obsługiwane są zarówno zarządzane, jak i zewnętrzne tables.
- table musi mieć włączoną funkcję mapowania column. Zobacz Zmiana nazwy i usuwanie columns za pomocą mapowania usługi Delta Lake column.
-
table delta musi mieć
minReaderVersion
>= 2 iminWriterVersion
>= 7. Zobacz artykuł Jak usługa Azure Databricks zarządza zgodnością funkcji usługi Delta Lake?. - Operacje zapisu do table muszą używać środowiska Databricks Runtime 13.2 lub nowszego.
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.enabledFormats
table. 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
,MAP
iVOID
. - 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