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 Jak odczytywać tabele Delta przy użyciu klientów Iceberg.
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej w środowisku Databricks Runtime 13.2 lub nowszym.
Format uniwersalny Delta (UniForm) umożliwia odczytywanie tabel Delta za pomocą klientów 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. Aplikacja UniForm automatycznie generuje asynchroniczne metadane góry lodowej bez ponownego zapisywania danych, dzięki czemu klienci góry lodowej mogą odczytywać tabele delty tak, jakby były tabelami góry lodowej. Pojedyncza kopia plików danych obsługuje oba formaty.
Można skonfigurować połączenie zewnętrzne, aby katalog Unity działał jako katalog Iceberg. Zobacz Odczyt przy użyciu końcówki katalogu Iceberg z Unity Catalog.
Uwaga
Generowanie metadanych UniForm jest uruchamiane asynchronicznie na obliczeniach używanych do zapisywania danych w tabelach delty, co może zwiększyć użycie zasobów sterownika.
Wymagania
Aby włączyć aplikację UniForm, musisz spełnić następujące wymagania:
- Tabela Delta musi zostać zarejestrowana w Unity Catalog. Obsługiwane są zarówno tabele zarządzane, jak i zewnętrzne.
- Tabela musi mieć włączone mapowanie kolumn. Zobacz Zmień nazwę i usuń kolumny za pomocą mapowania kolumn Delta Lake.
- Tabela delty musi mieć
minReaderVersion
>= 2 iminWriterVersion
>= 7. Zobacz artykuł Jak usługa Azure Databricks zarządza zgodnością funkcji usługi Delta Lake?. - Dla zapisów do tabeli należy używać środowiska Databricks Runtime 13.2 lub nowszego.
Włączanie funkcji Delta UniForm
Ważne
Włączenie Delta UniForm ustawia funkcję tabeli Delta IcebergCompatV1
, będącą częścią protokołu zapisu. Tylko klienci, którzy obsługują tę funkcję tabeli, mogą zapisywać dane w tabelach z obsługą funkcji UniForm. Musisz użyć środowiska Databricks Runtime w wersji 13.2 lub nowszej, aby zapisać dane w tabelach delty z włączoną tą funkcją.
Możesz wyłączyć UniForm, usuwając ustawienie właściwości tabeli delta.universalFormat.enabledFormats
. Nie można wyłączyć mapowania kolumn po jej włączeniu, a nie można cofnąć uaktualnień do wersji czytnika i protokołu zapisywania usługi Delta Lake.
Poniższa właściwość tabeli umożliwia obsługę UniForm dla Iceberg.
iceberg
jest jedyną prawidłową wartością.
'delta.universalFormat.enabledFormats' = 'iceberg'
Aby korzystać z UniForm, należy również włączyć mapowanie kolumn , i IcebergCompatV1
. Są one ustawiane automatycznie, jeśli włączysz funkcję UniForm podczas tworzenia tabeli, jak w poniższym przykładzie:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'iceberg');
Jeśli tworzysz nową tabelę z instrukcją CTAS, musisz ręcznie określić mapowanie kolumn, 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ą tabelę, 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 do tabeli za pomocą Iceberg. Zobacz Sprawdzanie stanu generowania metadanych góry lodowej.
Uwaga
Jeśli planujesz używać czytnika BigQuery jako klienta Iceberg, musisz ustawić spark.databricks.delta.write.dataFilesToSubdir
na true
w usłudze Azure Databricks, aby spełnić wymagania BigQuery dotyczące układu danych.
Zobacz Ograniczenia.
Kiedy UniForm generuje metadane Iceberg?
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 w systemie Iceberg, tabele Delta z częstymi zatwierdzeniami mogą wiązać wiele Delta zatwierdzeń 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 tabeli Delta i Iceberg i.
Sprawdzanie stanu generowania metadanych góry lodowej
UniForm dodaje następujące pola do metadanych Unity Catalog i tabeli Iceberg w celu śledzenia stanu generowania metadanych.
Pole metadanych | opis |
---|---|
converted_delta_version |
Najnowsza wersja tabeli Delta, dla której pomyślnie wygenerowano metadane Iceberg. |
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 Eksploratora wykazu. Te pola i wartości są również zwracane podczas korzystania z interfejsu API REST w celu uzyskania tabeli.
Zapoznaj się z dokumentacją klienta czytelnika platformy Iceberg, aby dowiedzieć się, jak przeglądać właściwości tabeli 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 uruchomić generowanie metadanych Iceberg dla najnowszej wersji tabeli Delta. Ta operacja jest uruchamiana synchronicznie, co oznacza, że po zakończeniu spis dostępny w Iceberg odzwierciedla najnowszą wersję tabeli delty dostępnej po rozpoczęciu 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 w tabeli Delta.
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 używający Iceberg wymagają podania ścieżki do wersjonowanych plików metadanych w celu zarejestrowania zewnętrznych tabel Iceberg. Za każdym razem, gdy aplikacja UniForm konwertuje nową wersję tabeli Delta na Iceberg, tworzy nowy plik metadanych JSON.
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 tabeli, korzystając z następującego wzorca:
<table-path>/metadata/<version-number>-<uuid>.metadata.json
Ścieżkę tego pliku można znaleźć przy użyciu Eksploratora wykazu. W przypadku tabel z włączoną funkcją UniForm szczegóły dla tabeli Delta zawierają pole dotyczące lokalizacji metadanych Iceberg.
Możesz również użyć interfejsu API REST, aby uzyskać wszystkie szczegóły tabeli, w tym lokalizację 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 czytników Iceberg opartych na ścieżkach mogą potrzebować ręcznego aktualizowania i odświeżania ścieżek metadanych JSON, aby odczytać bieżące wersje tabel. Użytkownicy mogą napotkać błędy podczas wykonywania zapytań dotyczących tabel Iceberg przy użyciu nieaktualnych wersji, ponieważ pliki danych Parquet są usuwane z tabeli Delta z VACUUM
.
Odczyt przy użyciu punktu końcowego katalogu Iceberg w Unity Catalog
Niektórzy klienci Iceberg mogą łączyć się z katalogiem REST Iceberg. Unity Catalog zapewnia tylko do odczytu implementację interfejsu API katalogu REST Iceberg dla tabel Delta 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.
Platformy znane z obsługi Iceberg catalog API to Apache Spark, Flink i Trino. Należy skonfigurować dostęp do bazowego magazynu obiektów w chmurze zawierającego tabelę delta z włączoną funkcją UniForm. Aby uzyskać szczegółowe informacje o konfiguracji, zapoznaj się z dokumentacją klienta czytnika góry lodowej.
Musisz wygenerować i skonfigurować osobisty token dostępu dla Azure Databricks, aby umożliwić innym usługom łączenie się z Unity Catalog. Zobacz Autoryzowanie 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 zapytania tabel w katalogu Unity za pomocą 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 struktury nazw, która jest obecna w Unity Catalog, ale dodaje dodatkowy prefiks unity
.
wersje tabel delta i 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 wersji tabeli lub sygnatur czasowych przechowywanych w metadanych tabeli.
Ogólnie rzecz biorąc, wersje tabel Iceberg i Delta nie są zgodne na podstawie znacznika czasu zatwierdzenia ani identyfikatora wersji. Jeśli chcesz sprawdzić, której wersji tabeli Delta odpowiada dana wersja tabeli Iceberg, możesz użyć odpowiednich właściwości tabeli ustawionych w tabeli Iceberg. Zobacz Sprawdzanie stanu generowania metadanych góry lodowej.
Ograniczenia
Istnieją następujące ograniczenia:
- Funkcja UniForm nie działa w tabelach z włączonymi wektorami usuwania. Zobacz Co to są wektory usuwania?.
- Tabele Delta z włączoną funkcją UniForm nie obsługują 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ą w tabelach UniForm, 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