Co je Apache Iceberg v Azure Databricks?

Apache Iceberg je opensourcový formát tabulky pro analytické úlohy, které podporují funkce, jako je vývoj schématu, časová cesta a skryté dělení. Podobně jako Delta Lake vytvoří Iceberg abstraktní vrstvu, která umožňuje transakce ACID na vašich datech v úložišti objektů.

Azure Databricks podporuje tabulky Iceberg, které používají formát souboru Apache Parquet a verze 1, 2 a 3 specifikace Iceberg. Iceberg udržuje atomicitu a konzistenci zápisem nových souborů metadat pro každou změnu tabulky. Všechny tabulky Iceberg v Azure Databricks se řídí otevřenou specifikací formátu tabulky Iceberg. Viz specifikace tabulky Iceberg.

Katalog Iceberg je vrstva nejvyšší úrovně architektury tabulky Iceberg, která při načítání tabulky vrací aktuální metadata. Katalog Iceberg zpracovává operace, jako je vytváření, vyřazení a přejmenování tabulek.

Azure Databricks podporuje tabulky Iceberg spravované pomocí:

Requirements

Pokud chcete používat spravované nebo cizí tabulky Apache Iceberg, musíte splňovat následující požadavky:

  • Použijte pracovní prostor s povolenou službou Unity Catalog.
  • Použijte Databricks Runtime 16.4 LTS nebo novější.

Vytváření tabulek Iceberg v katalogu Unity

Tabulky Iceberg, které vytvoříte v katalogu Unity Catalog, jsou spravované tabulky Iceberg. Tyto tabulky můžete vytvořit pomocí:

  • Databricks Runtime nebo Databricks SQL
  • Externí stroje kompatibilní s Icebergem, které podporují rozhraní REST API katalogu Iceberg, jako je Apache Spark, Flink, Trino nebo Kafka. Viz tabulky Access Azure Databricks z klientů Apache Iceberg.

Spravované tabulky Iceberg jsou plně integrované s funkcemi platformy Azure Databricks:

  • Katalog Unity spravuje úlohy životního cyklu, jako je vypršení platnosti snímků a komprimace souborů v těchto tabulkách.
  • Kapalné clusterování zlepšuje výkon dotazů.
  • Prediktivní optimalizace automatizuje operace, aby se snížily náklady na úložiště a zvýšily rychlost dotazů.
  • materializovaná zobrazení podporují přírůstkovou aktualizaci, aby výsledky byly aktuální při změnách zdrojových dat.
  • streamované tabulky podporují přírůstkové načítání dat ze systému Kafka a cloudového úložiště objektů pomocí Databricks SQL.

Databricks doporučuje ke čtení a zápisu do katalogu Unity používat klienta Iceberg verze 1.9.2 a vyšší.

Možnost číst tabulky Iceberg spravované jinými katalogy

Cizí tabulka Iceberg je spravována katalogem, který není součástí Katalogu Unity. Externí katalog ukládá aktuální metadata tabulky. Azure Databricks používá Lakehouse Federation k načtení metadat a čtení tabulky z úložiště objektů.

Cizí tabulky Iceberg jsou v Azure Databricks jen pro čtení a mají omezenou podporu platformy.

Přístup k tabulkám Iceberg pomocí externích systémů

Ke všem tabulkám Iceberg v katalogu Unity můžete přistupovat pomocí rozhraní API katalogu Iceberg REST. Toto otevřené rozhraní API podporuje operace čtení a zápisu z externích modulů Iceberg v různých jazycích a platformách. Viz tabulky Access Azure Databricks z klientů Apache Iceberg.

Katalog REST podporuje vydávání přihlašovacích údajů, které poskytují dočasné přihlašovací údaje externím strojům pro přístup k podkladovému úložišti. Další informace naleznete v tématu Přihlašovací údaje katalogu Unity pro přístup k externímu systému.

Výstraha

U pracovních prostorů, které používají výchozí úložiště, není podporováno poskytování přihlašovacích údajů. Viz Omezení.

Klonování spravovaných tabulek Iceberg

Můžete vytvořit úplnou nezávislou kopii spravované tabulky Iceberg pomocí DEEP CLONE. Hluboký klon zkopíruje datové soubory a metadata tabulky do nové spravované tabulky Iceberg v katalogu Unity. Viz Klonování spravované tabulky Iceberg.

Vytvoření materializovaného zobrazení kompatibilního s externími čtenáři Icebergu

Important

Spravovaná materializovaná zobrazení Iceberg jsou ve fázi Public Preview. Pokud chcete tuto funkci povolit, obraťte se na svůj tým účtů Databricks.

Můžete vytvořit materializované zobrazení , které je kompatibilní s externími čtenáři Iceberg. Chcete-li jej vytvořit, použijte v příkazu CREATE MATERIALIZED VIEWUSING ICEBERG. Úplnou syntaxi najdete v části CREATE MATERIALIZED VIEW (kanály). Úplné požadavky najdete v tématu Povolení přístupu k externím datům ke streamovaným tabulkám a materializovaným zobrazením.

CREATE MATERIALIZED VIEW <mv_name>
USING ICEBERG
AS
SELECT * FROM samples.nyctaxi.trips;

Po vytvoření materializovaného zobrazení spusťte REPAIR TABLE pomocí SYNC METADATA. Viz REPAIR TABLE.

REPAIR TABLE <mv_name> SYNC METADATA;

Externí čtenáři Icebergu si můžou přečíst materializované zobrazení, ale nemůžou do něj zapisovat. Informace o tom, jak číst z materializovaného zobrazení pomocí externí čtečky Iceberg, najdete v tématu Povolení externího přístupu k datům ve streamovaných tabulkách a materializovaných zobrazeních.

Vývoj oddílů

S vývojem oddílů můžete změnit schéma dělení existující tabulky Apache Iceberg bez přepisování dat. Nová data se zapíšou s aktualizovaným rozložením oddílu a stávající data si zachovají původní rozložení oddílu. Apache Iceberg sleduje parametry rozdělení a použije správný filtr při dotazování. Podívejte se na vývoj oddílů pro Apache Iceberg.

Poznámka:

Vývoj oddílů je podporován u spravovaných tabulek Iceberg prostřednictvím externích nástrojů Iceberg využívajících katalog Iceberg REST, ale ne prostřednictvím Databricks SQL. Transformace oddílů založené na výrazech, jako years() a bucket(), nejsou podporovány pro spravované tabulky Iceberg. Viz Omezení.

Informace o konfiguraci externího přístupu najdete v tématu Přístup k tabulkám Azure Databricks z klientů Apache Iceberg.

Následující příklady ukazují, jak používat vývoj oddílů se Sparkem SQL a rozšířením Iceberg. Syntaxi vývoje oddílů Apache Iceberg a podporované transformace najdete v tématu Apache Iceberg Spark DDL.

Přidejte pole oddílu

Přidat nové pole oddílu do existující tabulky:

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

Smazat pole oddílu

Odebrání existujícího pole oddílu z tabulky:

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

Nahraďte pole oddílu

Prohození jednoho pole oddílu za druhé bez přechodného přeuspořádání:

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

Omezení

Následující omezení platí pro tabulky Iceberg v Azure Databricks a můžou se změnit:

  • Tabulky Iceberg podporují pouze formát souborů Apache Parquet.
  • Pro Iceberg v2 nejsou podporována poziční mazání ani mazání založená na rovnosti. Místo toho Azure Databricks podporuje vektory odstranění Iceberg v3 pro odstranění na úrovni řádků.
  • Větvení a označování se nepodporují. Pouze hlavní větev je přístupná při čtení cizích tabulek Iceberg.
  • Rozkládání:
    • Vývoj oddílů u spravovaných tabulek Iceberg je podporován pouze při interakci s externími moduly Iceberg.
    • Cizí tabulky Iceberg nepodporují vývoj oddílů.
    • Dělení podle BINARY typu se nepodporuje.
  • Zobrazení nejsou přístupná z externích strojů Iceberg.
  • Následující datové typy se nepodporují:
    • UUID
    • Fixed(L)
    • TIME
    • Vnořené STRUCT s požadovanými poli
  • Omezení specifická pro Iceberg v3 najdete v tématu Omezení.

Omezení spravovaných tabulek Iceberg

Pro spravované tabulky Iceberg platí následující omezení:

  • Spravované tabulky Iceberg je možné vytvořit pouze v případě, že je povolená prediktivní optimalizace pro údržbu tabulek.
  • Následující vlastnosti tabulky spravuje katalog Unity a nejde je nastavit ručně:
    • write.location-provider.impl
    • write.data.path
    • write.metadata.path
    • write.format.default
    • write.delete.format.default
  • Kodek pro kompresi nepodporuje změnu komprese tabulky. Ve výchozím nastavení používají všechny tabulky Zstd.
  • Dělení podle výrazů (například years(), months(), days()hours(), , bucket()) není podporováno.
  • Funkce nepodporované v Apache Icebergu také nejsou dostupné pro spravované tabulky Iceberg. To zahrnuje sloupce generované systémem Delta Lake, omezení Azure Databricks a podporu kolace pro Delta Lake.

Omezení tabulek Iceberg cizích

Následující omezení platí zejména pro cizí tabulky Iceberg:

  • Časová cesta je podporována pouze pro snímky Icebergu, které byly dříve přečteny v Azure Databricks (tedy snímky, ve kterých byl proveden příkaz SELECT).
  • Použití transformačních funkcí bucketu pro particionování v Iceberg může snížit výkon dotazů při použití podmíněných filtrů.
  • Produkty vrstvení cloudového úložiště, jako je Amazon S3, nejsou integrované se zahraničními tabulkami Iceberg. Přístup k cizím tabulkám Iceberg v Azure Databricks může obnovit data archivovaná v nižších úrovních úložiště.
  • U clusterů v režimu vyhrazeného přístupu vyžadují REFRESH FOREIGN TABLE čtení a ALL PRIVILEGES operace na tabulkách Iceberg.