Udostępnij za pośrednictwem


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 IcebergCompatV1table, zobacz Legacy UniForm IcebergCompatV1.

Wymagania

Aby włączyć odczyty Iceberg, należy spełnić następujące wymagania:

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.enabledFormatstable. 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 przez DESCRIBE EXTENDED table_nameelement .
  • 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 przez DESCRIBE EXTENDED table_nameelement .
  • 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.