Odczytaj deltę tables z klientami Iceberg
Ten artykuł zawiera szczegółowe informacje dotyczące włączania odczytów góry lodowej w tables przechowywanych w usłudze Delta Lake w usłudze Azure Databricks. Ta funkcja wymaga środowiska Databricks Runtime 14.3 LTS lub nowszego.
Uwaga
Ta funkcja była wcześniej nazywana formatem uniwersalnym usługi Delta Lake (UniForm).
Połączenie zewnętrzne można skonfigurować tak, aby Unity Catalog działało jako Iceberg catalog. Zobacz Odczyt Databricks tables z klientów Iceberg.
Jak działają odczyty Iceberg (UniForm)?
Zarówno usługa Delta Lake, jak i Iceberg składają się z plików danych Parquet i warstwy metadanych. Włączenie odczytu Iceberg konfiguruje tables, aby automatycznie generate metadane Iceberg asynchronicznie, bez ponownego zapisywania danych, co umożliwia klientom Iceberg odczytywanie Delta tables zapisywanych przez usługę Azure Databricks. Pojedyncza kopia plików danych obsługuje wiele formatów.
Ważne
- Tables przy włączonym odczycie dla Iceberg używaj Zstandard zamiast Snappy jako kodek kompresji dla podstawowych plików Parquet.
- Generowanie metadanych Iceberg jest uruchamiane asynchronicznie na obliczeniach wykorzystywanych do zapisu danych do Delta tables, co może zwiększać użycie zasobów sterownika.
- Aby uzyskać dokumentację dotyczącą funkcji Legacy UniForm
IcebergCompatV1
table, zobacz Legacy UniForm IcebergCompatV1.
Wymagania
Aby włączyć odczyty Iceberg, należy spełnić następujące wymagania:
- Delta table musi być zarejestrowana w środowisku Unity Catalog. Obsługiwane są zarówno zarządzane, jak i zewnętrzne tables.
- table musi mieć włączone mapowanie column. Zobacz Zmień nazwę i usuń columns, korzystając z mapowania Delta Lake column w.
-
table delta musi mieć
minReaderVersion
>= 2 iminWriterVersion
>= 7. Zobacz artykuł Jak usługa Azure Databricks zarządza zgodnością funkcji usługi Delta Lake?. - Zapisy do table muszą używać środowiska Databricks Runtime 14.3 LTS lub nowszego.
Uwaga
Nie można włączyć wektorów usuwania na table, gdy włączone są odczyty Iceberg.
Użyj REORG
, aby wyłączyć i oczyścić wektory usuwania, jednocześnie umożliwiając odczyty Iceberg na już istniejących table z włączonymi wektorami usuwania. Zobacz Włącz lub zaktualizuj obsługę odczytu Iceberg za pomocą REORG.
Włącz odczyty Iceberg (UniForm)
Ważne
Po włączeniu odczytu Iceberg funkcja protokołu zapisu IcebergCompatV2
zostanie dodana do table. Tylko klienci, którzy obsługują tę funkcję table, mogą zapisywać do tables, gdy włączone są odczyty Iceberg. Na platformie Azure Databricks musisz użyć środowiska Databricks Runtime 14.3 LTS lub nowszego, aby zapisać dane do tables, który jest włączony.
Można wyłączyć odczyty Iceberg, odznaczając właściwość delta.universalFormat.enabledFormats
table. Nie można cofnąć uaktualnień do wersji protokołu zapisywania i czytnika usługi Delta Lake.
Aby umożliwić odczyty za pomocą Iceberga, musisz skonfigurować następujące właściwości: settable.
'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'
Po pierwszym włączeniu odczytów Iceberg 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.
Aby uzyskać list ograniczeń, zobacz Ograniczenia.
Włącz odczyty Iceberg podczas tworzenia table
Column mapowanie musi być włączone, aby używać odczytów Iceberg. Dzieje się tak automatycznie, jeśli włączysz odczyty Iceberg podczas tworzenia table, jak w poniższym przykładzie:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Włącz odczyty Iceberg na istniejącym table
W środowisku Databricks Runtime 15.4 LTS lub nowszym można włączyć lub zaktualizować odczyty Iceberg w istniejącym table za pomocą następującej składni:
ALTER TABLE table_name SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Włącz lub zaktualizuj obsługę odczytu Iceberg przy użyciu REORG
Możesz użyć REORG
, aby włączyć odczyty Iceberg i przepisać bazowe pliki danych, jak w poniższym przykładzie:
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
Użyj REORG
, jeśli którakolwiek z następujących wartości jest prawdziwa:
- Twój table ma włączone wektory usuwania.
- Wcześniej włączono wersję Platformy
IcebergCompatV1
Lodowej UniForm. - Musisz przeczytać z aparatów góry lodowej, które nie obsługują plików Parquet w stylu Hive, takich jak Atena lub Redshift.
Kiedy ma miejsce generowanie metadanych Iceberg?
Usługa Azure Databricks wyzwala asynchronicznie generowanie metadanych po zakończeniu transakcji zapisu usługi Delta Lake. Ten proces generowania metadanych używa tych samych obliczeń, które zakończyły transakcję delta.
Uwaga
Możesz również ręcznie wyzwolić generowanie metadanych góry lodowej. Zobacz Ręczne wyzwalanie konwersji metadanych góry lodowej.
pl-PL: Aby uniknąć opóźnień zapisu skojarzonych z generowaniem metadanych, Delta tables z częstymi zatwierdzeniami może grupować wiele zatwierdzeń Delta w jedno zatwierdzenie do metadanych Iceberg.
Usługa Delta Lake zapewnia, że w danym zasobie obliczeniowym trwa tylko jeden proces generowania metadanych. Zatwierdzenia, które wyzwoliłyby drugi współbieżny proces generowania metadanych, pomyślnie zatwierdzają w systemie Delta, ale nie wyzwalają asynchronicznego generowania metadanych w systemie Iceberg. 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.
wersje Delta i table Góry Lodowej
Delta Lake i Iceberg umożliwiają wykonywanie zapytań dotyczących podróży w czasie przy użyciu wersji table lub sygnatur czasowych przechowywanych w metadanych table.
Ogólnie rzecz biorąc, wersje Delta table nie są zgodne z wersjami Iceberg według znacznika czasu zatwierdzenia ani identyfikatora wersji. Aby sprawdzić, która wersja delty table danej wersji table góry lodowej odpowiada, możesz użyć odpowiednich właściwości table. Zobacz Sprawdzanie stanu generowania metadanych góry lodowej.
Sprawdzanie stanu generowania metadanych góry lodowej
Włączenie odczytu Iceberg na table dodaje 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 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, wykonując jedną z następujących czynności:
- Przejrzyj sekcję zwróconą
Delta Uniform Iceberg
przezDESCRIBE EXTENDED table_name
element . - Przeglądanie metadanych table za pomocą eksploratora Catalog.
- Używanie interfejsu API REST do gettable.
Zapoznaj się z dokumentacją klienta czytnika Iceberg, aby dowiedzieć się, jak przeglądać właściwości table poza 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 table zawartość dostępna w górach lodowych odzwierciedla najnowszą wersję table 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 do Delta table.
Użyj następującej składni, aby ręcznie wyzwolić generowanie metadanych Iceberg:
MSCK REPAIR TABLE <table-name> SYNC METADATA
Zobacz REPAIR TABLE.
Odczytywanie Iceberg przy użyciu ścieżki metadanych JSON
Niektórzy klienci Iceberga wymagają podania ścieżki do wersjonowanych plików metadanych w celu zarejestrowania zewnętrznego Iceberga tables. Za każdym razem, gdy usługa Azure Databricks konwertuje nową wersję Delta table na format 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
W usłudze Azure Databricks możesz przejrzeć tę lokalizację metadanych, wykonując jedną z następujących czynności:
- Przejrzyj sekcję zwróconą
Delta Uniform Iceberg
przezDESCRIBE EXTENDED table_name
element . - Przeglądanie metadanych table za pomocą eksploratora Catalog.
- Za pomocą następującego polecenia z interfejsem API REST:
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 opartych na ścieżkach mogą wymagać ręcznego aktualizowania i odświeżania ścieżek JSON 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 Delta table z VACUUM
.
Ograniczenia
Istnieją następujące ograniczenia dla wszystkich tables z włączonymi odczytami Iceberg:
- Odczyty Iceberg nie działają na tables przy włączonych wektorach usuwania. Zobacz Co to są wektory usuwania?.
- Delta tables z włączoną funkcją odczytu Iceberg nie obsługują typów
VOID
. - Obsługa klienta Iceberg jest tylko do odczytu. Zapisy nie są obsługiwane.
- Klienci czytników Iceberg mogą mieć swoje własne ograniczenia, niezależnie od wsparcia usługi Azure Databricks dla odczytów Iceberg. Zapoznaj się z dokumentacją wybranego klienta.
- recipients udostępniania różnicowego może odczytywać tylko table jako delta, nawet jeśli odczyty góry lodowej są włączone.
- Niektóre funkcje Delta Lake table używane przez mechanizm Iceberg są nieobsługiwane przez niektórych klientów Delta Sharing. Zobacz Co to jest udostępnianie różnicowe?.
Zmienny kanał danych działa dla klientów Delta, gdy odczyty Iceberg są włączone, ale nie jest obsługiwany w Iceberg.