Co to jest Apache Iceberg w Azure Databricks?

Apache Iceberg to format tabeli typu open source dla obciążeń analitycznych. Obsługuje funkcje, takie jak ewolucja schematu, podróż w czasie i ukryte partycjonowanie. Podobnie jak Delta Lake, Iceberg tworzy warstwę abstrakcji, która umożliwia obsługę transakcji ACID na danych przechowywanych w pamięci obiektowej.

Azure Databricks obsługuje tabele Iceberg, które korzystają z formatu plików Apache Parquet oraz wersji 1, 2 i 3 specyfikacji Iceberg. Iceberg utrzymuje atomowość i spójność, zapisując nowe pliki metadanych dla każdej zmiany tabeli. Wszystkie tabele Iceberg w Azure Databricks są zgodne ze specyfikacją otwartego formatu tabeli Iceberg. Zobacz specyfikację tabeli Iceberg.

Katalog Iceberg to najwyższa warstwa architektury tabel Iceberg, która zwraca bieżące metadane podczas ładowania tabeli. Katalog Iceberg obsługuje operacje takie jak tworzenie, usuwanie i zmienianie nazw tabel.

Azure Databricks obsługuje tabele Iceberg zarządzane przez:

Wymagania

Musisz spełnić następujące wymagania:

  • Obszar roboczy z włączonym Unity Catalog.
  • Użyj środowiska Databricks Runtime 16.4 LTS lub nowszego dla zarządzanych i zewnętrznych tabel Iceberg.

Tworzenie tabel Iceberg w Unity Catalog

Tabele góry lodowej tworzone w wykazie aparatu Unity są zarządzanymi tabelami góry lodowej. Te tabele można utworzyć przy użyciu następujących metod:

Zarządzane tabele Iceberg są w pełni zintegrowane z funkcjami platformy Azure Databricks:

  • Unity Catalog zarządza zadaniami związanymi z cyklem życia, takimi jak wygaśnięcie migawki i kompresja plików w tych tabelach.
  • Zarządzane tabele Iceberg obsługują również dynamiczne klastrowanie, co zwiększa wydajność zapytań.
  • Optymalizacja predykcyjna automatyzuje operacje w celu zmniejszenia kosztów magazynowania i zwiększenia szybkości zapytań.
  • Zarządzane tabele Iceberg obsługują również widoki zmaterializowane i tabele strumieniowe.

Usługa Databricks zaleca używanie klientów Iceberg w wersji 1.9.2 lub nowszej do odczytu i zapisu do Unity Catalog.

Odczytywanie tabel Iceberg zarządzanych przez inne katalogi

Zewnętrzna tabela Iceberg to tabela Iceberg zarządzana przez katalog poza Unity Catalog. Wykaz zewnętrzny przechowuje bieżące metadane tabeli. Azure Databricks używa Lakehouse Federation aby pobrać metadane i odczytać tabelę z magazynu obiektów.

Tabele Iceberg są tylko do odczytu w Azure Databricks i mają ograniczone wsparcie platformy.

Dostęp do tabel Iceberg za pomocą systemów zewnętrznych

Możesz uzyskać dostęp do wszystkich tabel Iceberg w Unity Catalog za pomocą Iceberg REST Catalog API. Ten otwarty interfejs API obsługuje operacje odczytu i zapisu z zewnętrznych silników Iceberg w różnych językach i na różnych platformach. Zobacz jak uzyskać dostęp do tabel Azure Databricks z klientów Apache Iceberg.

Katalog REST obsługuje udostępnianie poświadczeń, które dostarcza tymczasowe poświadczenia do zewnętrznych silników w celu uzyskania dostępu do bazowego magazynu. Aby uzyskać więcej informacji, zobacz Udostępnianie poświadczeń katalogu Unity dla dostępu do systemu zewnętrznego.

Ostrzeżenie

Sprzedaż poświadczeń nie jest obsługiwana w obszarach roboczych korzystających z magazynu domyślnego. Zobacz Ograniczenia.

Ewolucja partycji

Dzięki ewolucji partycji można zmienić schemat partycjonowania istniejącej tabeli Apache Iceberg bez ponownego zapisywania danych. Nowe dane są zapisywane przy użyciu zaktualizowanego układu partycji, a istniejące dane zachowują oryginalny układ partycji. Apache Iceberg śledzi specyfikacje partycji i stosuje prawidłowy filtr w czasie zapytania. Zobacz Ewolucja partycji dla platformy Apache Iceberg.

Uwaga / Notatka

Ewolucja partycji jest obsługiwana w zarządzanych tabelach Iceberg za pośrednictwem zewnętrznych silników Iceberg przy użyciu Iceberg REST Catalog, ale nie za pośrednictwem Databricks SQL. Przekształcenia partycji oparte na wyrażeniach, takie jak years() i bucket(), nie są obsługiwane dla zarządzanych tabel Iceberg. Zobacz Ograniczenia.

Aby skonfigurować dostęp zewnętrzny, zobacz jak łączyć się do tabel Azure Databricks przy użyciu klientów Apache Iceberg.

W poniższych przykładach pokazano, jak używać ewolucji partycji z usługą Spark SQL i rozszerzeniem Iceberg. Aby zapoznać się ze składnią ewolucji partycji Apache Iceberg i obsługiwanymi przekształceniami, zobacz Apache Iceberg Spark DDL.

Dodawanie pola partycji

Aby dodać nowe pole partycji do istniejącej tabeli:

ALTER TABLE catalog.schema.table ADD PARTITION FIELD column_name;

Usuwanie pola partycji

Aby usunąć istniejące pole partycji z tabeli:

ALTER TABLE catalog.schema.table DROP PARTITION FIELD column_name;

Zastąp pole partycji

Aby zamienić jedno pole partycji na inne bez ponownej partycji pośredniczącej:

ALTER TABLE catalog.schema.table REPLACE PARTITION FIELD old_column WITH new_column;

Ograniczenia

Następujące ograniczenia dotyczą tabel góry lodowej w Azure Databricks i mogą ulec zmianie:

  • Tabele Iceberg obsługują tylko format pliku Apache Parquet.
  • W przypadku Iceberg v2 usuwanie według pozycji i usuwanie oparte na równości nie są obsługiwane. Zamiast tego Azure Databricks obsługuje wektory usuwania Iceberg w wersji 3 na potrzeby usuwania na poziomie wiersza.
  • Rozgałęzianie i tagowanie nie są obsługiwane. Tylko gałąź główna jest dostępna podczas odczytywania zagranicznych tabel Iceberg.
  • Partycjonowanie:
    • Ewolucja partycji jest obsługiwana w zarządzanych tabelach Iceberg tylko podczas interakcji z zewnętrznymi silnikami Iceberg.
    • Zagraniczne tabele Iceberg nie obsługują ewolucji partycji.
    • Partycjonowanie według BINARY typu nie jest obsługiwane.
  • Widoki nie są dostępne przez zewnętrzne silniki Iceberg.
  • Następujące typy danych nie są obsługiwane:
    • UUID
    • Fixed(L)
    • TIME
    • Zagnieżdżone STRUCT z wymaganymi polami
  • Informacje o ograniczeniach dotyczących Iceberg v3 można znaleźć w sekcji Ograniczenia.

Ograniczenia zarządzanej tabeli Iceberg

Następujące ograniczenia mają zastosowanie wyłącznie do zarządzanych tabel Iceberg.

  • Zarządzane tabele Iceberg można tworzyć tylko wtedy, gdy optymalizacja predykcyjna jest włączona do konserwacji tabel.
  • Następujące właściwości tabeli są zarządzane przez Unity Catalog i nie można ich ustawić ręcznie.
    • write.location-provider.impl
    • write.data.path
    • write.metadata.path
    • write.format.default
    • write.delete.format.default
  • Kodek kompresji do zmiany kompresji tabeli nie jest obsługiwany. Domyślnie wszystkie tabele używają biblioteki Zstd.
  • Partycjonowanie według wyrażeń (na przykład years(), , months()days(), hours(), bucket()) nie jest obsługiwane.
  • Funkcje nieobsługiwane w Apache Iceberg również nie są dostępne dla zarządzanych tabel Iceberg. Obejmuje to kolumny wygenerowane w Delta Lake, ograniczenia na Azure Databricks oraz obsługę sortowania dla Delta Lake.

Ograniczenia zewnętrznej tabeli Iceberg

Następujące ograniczenia mają zastosowanie w szczególności do zewnętrznych tabel Iceberg:

  • Podróż w czasie jest obsługiwana tylko w przypadku migawek Iceberg, które zostały wcześniej odczytane na Azure Databricks (czyli migawek, dla których wykonano instrukcję SELECT).
  • Użycie funkcji transformacji bucket na potrzeby partycjonowania Iceberg może obniżyć wydajność zapytań, gdy są używane filtry warunkowe.
  • Produkty do hierarchizacji pamięci masowej w chmurze, takie jak Amazon S3, nie są zintegrowane z zagranicznymi tabelami Iceberg. Uzyskiwanie dostępu do obcych tabel Iceberg w Azure Databricks może przywrócić dane zarchiwizowane w warstwach magazynowania niższych kosztów.
  • W klastrach trybu dedykowanego dostępu operacje odczytu i REFRESH FOREIGN TABLE operacji w tabelach Iceberg wymagają ALL PRIVILEGES.