Čtení tabulek Delta Lake s klienty Icebergu pomocí UniFormu

Funkce čtení pomocí Icebergu, která je k dispozici v prostředí Databricks Runtime 14.3 LTS a vyšších verzích, umožňuje nakonfigurovat tabulky Delta Lake tak, aby automaticky generovaly metadata pro Iceberg, takže klienti Icebergu mohou číst data Delta Lake bez nutnosti přepisovat soubory.

Externí připojení můžete nakonfigurovat tak, aby katalog Unity fungoval jako katalog Iceberg. Viz Přístup k tabulkám Azure Databricks z klientů Apache Iceberg.

Jak funguje čtení v Icebergu

Delta Lake i Apache Iceberg se skládají z datových souborů Parquet a vrstvy metadat. Povolení čtení Icebergu konfiguruje tabulky Delta Lake tak, aby automaticky asynchronně generovaly metadata Icebergu, aniž by museli přepisovat data a umožnit klientům Icebergu je číst. Jedna kopie datových souborů podporuje více formátů.

Při použití čtení Iceberg zvažte následující:

  • Tabulky Delta Lake s povolenou podporou čtení Icebergu používají pro podkladové datové soubory Parquet jako kompresní kodek místo Snappy formát Zstandard.
  • Generování metadat Icebergu běží asynchronně na výpočetních prostředcích používaných k zápisu dat do tabulek Delta Lake, což může zvýšit využití prostředků ovladače.

Dokumentaci ke starší funkci tabulky UniForm IcebergCompatV1 naleznete v tématu Legacy UniForm IcebergCompatV1.

Požadavky

Pokud chcete povolit čtení Icebergu, musí být splněny následující požadavky:

Poznámka:

Nelze povolit vektory odstranění u tabulky, kde je povoleno načítání technologie Iceberg.

Pomocí REORG můžete vypnout a trvale odstranit vektory mazání a zároveň povolit čtení Icebergu v existující tabulce, ve které jsou vektory mazání povolené. Vizte Povolení nebo upgrade podpory čtení Icebergu pomocí REORG.

Povolte čtení Icebergu (UniForm)

Poznámka:

Povolení čtení Icebergu přidá funkci protokolu pro zápis IcebergCompatV2 a aktualizuje protokol zapisovače. Do tabulky můžou zapisovat pouze klienti, kteří tuto funkci tabulky podporují. To může mít vliv na kompatibilitu s externími klienty Delta Lake. Viz kompatibilita a protokoly funkcí Delta Lake.

Když poprvé povolíte čtení Icebergu, začne generování asynchronních metadat. Tato úloha musí být dokončena, aby externí klienti mohli dotazovat tabulku pomocí Icebergu. Viz Kontrola stavu generování metadat Icebergu.

Seznam omezení naleznete v části Omezení.

Během vytváření tabulky

Mapování sloupců se povolí automaticky, když během vytváření tabulky povolíte čtení Icebergu:

CREATE TABLE T(c1 INT) TBLPROPERTIES(
  'delta.columnMapping.mode' = 'id',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Databricks doporučuje nastavit delta.columnMapping.mode = id pro účely kompatibility. Viz Přejmenování a vyřazení sloupců v rámci mapování sloupců Delta Lake.

Na existující tabulce

Chcete-li v Databricks Runtime 15.4 LTS a novějších verzích povolit čtení Icebergu pro existující tabulku:

ALTER TABLE table_name SET TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Podrobnosti o režimu mapování sloupců najdete v name tématu Režimy mapování sloupců.

Povolte nebo upgradujte podporu čtení Icebergu pomocí REORG

Použijte REORG k povolení čtení Icebergu, pokud platí některá z následujících podmínek:

  • V tabulce jste povolili vektory odstranění.
  • Dříve jste povolili IcebergCompatV1 verzi UniForm Iceberg.
  • Potřebujete číst z modulů Iceberg, které nepodporují soubory Parquet ve stylu Hive, jako jsou Athena nebo Redshift.

Pokud chcete povolit čtení a přepis podkladových datových souborů Icebergu, použijte REORG podobný příklad:

REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));

Ověřte, že je čtení z Icebergu povoleno.

Pomocí DESCRIBE EXTENDED ověřte, že je pro vaši tabulku povoleno čtení Iceberg (UniForm):

DESCRIBE EXTENDED catalog_name.schema_name.table_name;

Ve výstupu vyhledejte oddíl Delta Uniform Iceberg . Pokud je tato sekce přítomna, jsou čtení Icebergu na vaší tabulce povolena.

Alternativně můžete použít SHOW TBLPROPERTIES:

SHOW TBLPROPERTIES catalog_name.schema_name.table_name;

Zkontrolujte následující vlastnosti:

  • delta.enableIcebergCompatV2 = true
  • delta.universalFormat.enabledFormats = iceberg

Pokud jsou přítomny obě vlastnosti s těmito hodnotami, je povoleno čtení dat Icebergu.

Vypněte čtení z Icebergu

Čtení Icebergu můžete vypnout zrušením nastavení delta.universalFormat.enabledFormats vlastnosti tabulky:

ALTER TABLE table_name UNSET TBLPROPERTIES ('delta.universalFormat.enabledFormats');

Upgrade verzí protokolu Delta Lake pro čtení a zápis nelze vrátit zpět. Viz kompatibilita a protokoly funkcí Delta Lake.

Generování metadat Iceberg

Azure Databricks aktivuje generování metadat asynchronně po dokončení transakce zápisu Delta Lake. Tento proces generování metadat používá stejný výpočetní výkon, který dokončil transakci Delta Lake.

Generování metadat Icebergu můžete aktivovat také ručně. Vizte Ruční spuštění převodu metadat Icebergu.

Aby se předešlo latencím při zápisu spojeným s generováním metadat, mohou tabulky Delta Lake s častými commity sloučit několik commitů Delta Lake do jednoho commitu metadat Icebergu.

Delta Lake zajišťuje, že na daném výpočetním prostředku probíhá pouze jeden proces generování metadat. Potvrzení změn, která by spustila druhý souběžný proces generování metadat, se úspěšně zapíšou do Delta Lake, ale nespustí asynchronní generování metadat Iceberg. To zabraňuje kaskádové latenci generování metadat pro úlohy s častými potvrzeními (sekundy až minuty mezi potvrzeními).

Podívejte se na verze tabulek Delta a Iceberg.

verze tabulek Delta a Iceberg

Delta Lake a Iceberg umožňují dotazy na časovou cestu pomocí tabulkových verzí nebo časových razítek uložených v metadatech tabulky.

Není zaručeno, že verze tabulek Delta Lake odpovídají verzím Icebergu, a to ani podle časového razítka commitu, ani podle ID verze. Pokud chcete ověřit, která verze tabulky Delta Lake odpovídá dané verzi tabulky Iceberg, použijte odpovídající vlastnosti tabulky. Viz Kontrola stavu generování metadat Icebergu.

Kontrola stavu generování metadat Icebergu

Povolení čtení Icebergu v tabulce přidá následující pole do metadat katalogu Unity a tabulek Iceberg ke sledování stavu generování metadat:

Pole metadat Popis
converted_delta_version Nejnovější verze tabulky Delta Lake, pro kterou byla úspěšně generována metadata Iceberg.
converted_delta_timestamp Časové razítko nejnovějšího commitu Delta Lake, pro který byla úspěšně vygenerována metadata pro Iceberg.

V Azure Databricks můžete tato pole metadat zkontrolovat jedním z následujících způsobů:

  • Kontrola oddílu Delta Uniform Iceberg vráceného uživatelem DESCRIBE EXTENDED table_name.
  • Kontrola metadat tabulky pomocí Průzkumníka katalogu

Informace o kontrole vlastností tabulky mimo Azure Databricks najdete v dokumentaci ke klientovi čtenáře Icebergu. U OSS Apache Sparku můžete tyto vlastnosti zobrazit pomocí následující syntaxe:

SHOW TBLPROPERTIES <table-name>;

Ruční aktivace převodu metadat Icebergu

Generování metadat Icebergu můžete ručně aktivovat pro nejnovější verzi tabulky Delta Lake. Tato operace běží synchronně. Po dokončení bude obsah tabulky dostupný v Icebergu odrážet nejnovější verzi tabulky Delta Lake dostupnou při spuštění procesu převodu.

Tato operace není nutná za normálních podmínek. Použijte jej k obnovení po následujících potížích:

  • Cluster se ukončí před úspěšným automatickým generováním metadat.
  • Chyba nebo selhání úlohy přeruší generování metadat.
  • Klient, který nepodporuje generování metadat UniForm Icebergu, zapisuje do tabulky Delta Lake.

Ruční aktivace generování metadat Icebergu pomocí následující syntaxe:

MSCK REPAIR TABLE <table-name> SYNC METADATA

Viz REPAIR TABLE.

Čtení Icebergu pomocí metadatové cesty JSON

Někteří klienti Icebergu, například BigQuery, vyžadují, abyste zadali cestu k souborům metadat s verzemi pro registraci externích tabulek Iceberg. Pokaždé, když Azure Databricks převede novou verzi tabulky Delta Lake na Iceberg, vytvoří nový soubor JSON metadat.

Podrobnosti o konfiguraci najdete v dokumentaci ke konkrétnímu klientovi čtenáře Icebergu.

Delta Lake ukládá metadata Icebergu v adresáři tabulky pomocí následujícího vzoru:

<table-path>/metadata/<version-number>-<uuid>.metadata.json

V Azure Databricks můžete toto umístění metadat zkontrolovat jedním z následujících způsobů:

  • Kontrola oddílu Delta Uniform Iceberg vráceného uživatelem DESCRIBE EXTENDED table_name.
  • Kontrola metadat tabulky pomocí Průzkumníka katalogu

Důležité

Klienti opírající se o cesty Iceberg čtečky mohou vyžadovat ruční aktualizaci a obnovení cest JSON metadat pro čtení aktuálních verzí tabulek. Uživatelé mohou při dotazování na tabulky Iceberg pomocí zastaralých verzí narazit na chyby, když jsou datové soubory Parquet z tabulky Delta Lake odebrány pomocí VACUUM.

Omezení

Na všechny tabulky s povolenými Iceberg čteními existují následující omezení:

  • Podpora klientů Icebergu je pouze pro čtení. Zápisy nejsou podporovány.
    • Klienti Iceberg čtení můžou mít jednotlivá omezení nezávisle na podpoře Azure Databricks pro čtení Iceberg. Prohlédněte si dokumentaci ke zvolenému klientovi.
  • Vektory odstranění nejsou podporovány pro čtení Iceberg v2. Apache Iceberg v3 však podporuje vektory odstranění. Viz Použití funkcí Apache Iceberg v3 a vektorů odstranění v Databricks.
  • Čtení Iceberg nelze povolit v materializovaných zobrazeních ani streamovaných tabulkách používajících IcebergCompatV2. U materializovaných zobrazení a streamovacích tabulek spravovaných kanálem pipeline můžete místo toho povolit externí přístup k Icebergu pomocí IcebergCompatV3. Tato funkce je ve verzi Public Preview. Viz Povolit externí přístup k datům pro streamovací tabulky a materializovaná zobrazení.
  • K tabulce Delta Lake se musí přistupovat podle názvu (nikoli cesty), aby se automaticky aktivovalo generování metadat Icebergu.
  • Tabulky Delta Lake s povoleným čtením Icebergu nepodporují typy VOID.
  • Některé funkce tabulek Delta Lake používané při čtení pomocí Icebergu nejsou podporovány některými čtecími klienty OpenSharing. Viz Co je OpenSharing?
  • Příjemci Open Sharing mohou číst tabulky Delta Lake, u kterých je povoleno čtení přes Iceberg, jako tabulky Iceberg pomocí rozhraní Iceberg REST Catalog API. Tato funkce je ve verzi Public Preview. Viz Povolení sdílení externím klientům Icebergu.
  • Starší kanál dat o změnách funguje u klientů Delta, když je povoleno čtení Icebergu, ale v Icebergu není podporován. Viz Starší kanál změnových dat pro Delta Lake.