Sdílet prostřednictvím


Čtení tabulek Delta s klienty Iceberg pomocí uniformu

Delta Universal Format (UniForm) umožňuje číst tabulky Delta s klienty čtenáře Iceberg. Tato funkce vyžaduje Databricks Runtime 14.3 LTS nebo vyšší.

Důležité

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

UniForm využívá skutečnost, že Delta Lake i Iceberg se skládají z datových souborů Parquet a vrstvy metadat. UniForm automaticky generuje metadata Iceberg asynchronně bez přepisování dat, aby klienti Icebergu mohli číst tabulky Delta, jako by šlo o tabulky Iceberg. Jedna kopie datových souborů obsluhuje oba formáty.

Externí připojení můžete nakonfigurovat tak, aby katalog Unity fungoval jako katalog Iceberg. Viz Čtení pomocí koncového bodu katalogu Iceberg katalogu Unity.

UniForm používá zstd místo snappy jako komprimační kodek pro podkladové datové soubory Parquet.

Poznámka:

Generování metadat UniForm běží asynchronně na výpočetních prostředcích používaných k zápisu dat do tabulek Delta, což může zvýšit využití prostředků ovladače.

Požadavky

Pokud chcete povolit UniForm, musíte splnit následující požadavky:

Poznámka:

U tabulky s povoleným UniFormem nelze povolit vektory odstranění. Při povolení UniForm u existující tabulky s povolenými vektory odstranění uniForm zakáže a vyprázdní vektory odstranění a podle potřeby přepíše datové soubory.

Povolení delta uniformu

Důležité

Povolení Delta UniForm nastaví funkci IcebergCompatV2tabulky Delta , funkci protokolu zápisu. Do tabulek s podporou UniFormu můžou zapisovat pouze klienti, kteří tuto funkci tabulky podporují. K zápisu do tabulek Delta s povolenou funkcí musíte použít Databricks Runtime 14.3 LTS nebo vyšší.

UniForm můžete vypnout zrušením nastavení delta.universalFormat.enabledFormats vlastnosti tabulky. Po povolení nelze vypnout mapování sloupců a upgrade na verze protokolu Delta Lake reader a writer nelze vrátit zpět.

Pokud chcete povolit podporu UniFormu pro Iceberg, musíte nastavit následující vlastnosti tabulky:

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

Musíte také povolit mapování sloupců, aby bylo možné použít UniForm. To se povolí automaticky, pokud při vytváření tabulky povolíte UniForm, jak je znázorněno v následujícím příkladu:

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

UniForm můžete u existující tabulky povolit pomocí následující syntaxe:

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

Poznámka:

Tato syntaxe také funguje pro upgrade z verze Public Preview UniForm, která používala funkci IcebergCompatV1tabulky .

Tato syntaxe automaticky zakáže a vyprázdní vektory odstranění z tabulky. Existující soubory se podle potřeby přepíšou, aby byly kompatibilní s Icebergem.

Při prvním povolení UniFormu začíná 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.

Poznámka:

Pokud jako klienta čtenáře Icebergu plánujete používat BigQuery, musíte v true Azure Databricks nastavitspark.databricks.delta.write.dataFilesToSubdir, aby vyhovoval požadavku BigQuery na rozložení dat.

Viz Omezení.

Kdy UniForm generuje metadata Icebergu?

Azure Databricks aktivuje generování metadat Iceberg asynchronně po dokončení transakce zápisu Delta Lake pomocí stejného výpočetního výkonu, který dokončil transakci Delta. Generování metadat Icebergu můžete aktivovat také ručně. Viz Ruční aktivace převodu metadat Icebergu.

Aby se zabránilo latencím zápisu spojeným s generováním metadat Icebergu, tabulky Delta s častými potvrzeními můžou sbalit několik potvrzení Delta do jednoho potvrzení Icebergu.

Delta Lake zajišťuje, že kdykoli probíhá pouze jeden proces generování metadat Icebergu. Potvrzení, která by aktivovala druhý souběžný proces generování metadat Icebergu, se úspěšně potvrdí do delta, ale neaktivují asynchronní generování metadat Icebergu. To zabraňuje kaskádové latenci generování metadat pro úlohy s častými potvrzeními (sekundy až minuty mezi potvrzeními).

Viz verze tabulek Delta a Iceberg.

Kontrola stavu generování metadat Icebergu

UniForm přidá do katalogu Unity a metadat tabulky Iceberg následující pole pro sledování stavu generování metadat:

Pole metadat Popis
converted_delta_version Nejnovější verze tabulky Delta, pro kterou byla úspěšně generována metadata Iceberg.
converted_delta_timestamp Časové razítko posledního potvrzení Delta, pro které se úspěšně vygenerovala metadata Icebergu.

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
  • K získání tabulky použijte rozhraní REST API.

Informace o kontrole vlastností tabulek 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 aktivovat ručně pro nejnovější verzi tabulky Delta. Tato operace běží synchronně, což znamená, že po dokončení se obsah tabulky, která je k dispozici v Icebergu, odráží nejnovější verzi tabulky Delta dostupnou při spuštění procesu převodu.

Tato operace by neměla být nutná za normálních podmínek, ale může vám pomoct, pokud narazíte na následující:

  • 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 zápisy metadat Icebergu UniForm do tabulky Delta.

K ruční aktivaci generování metadat Icebergu použijte následující syntaxi:

MSCK REPAIR TABLE <table-name> SYNC METADATA

Viz OPRAVA TABULKY.

Čtení pomocí cesty JSON metadat

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

Klienti, kteří používají cesty JSON metadat ke konfiguraci Icebergu, zahrnují BigQuery. Podrobnosti o konfiguraci najdete v dokumentaci ke 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
  • Pomocí následujícího příkazu s rozhraním REST API:
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>

Odpověď obsahuje následující informace:

{
    ...
          "delta_uniform_iceberg": {
              "metadata_location":  "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
    }
}

Důležité

Klienti čtenáře Icebergu založené na cestě ke čtení aktuálních verzí tabulek můžou vyžadovat ruční aktualizaci a aktualizaci cest JSON metadat. Uživatelé můžou při dotazování tabulek Iceberg pomocí zastaralých verzí při odebrání datových souborů Parquet z tabulky Delta docházet k chybám VACUUM.

Čtení pomocí koncového bodu katalogu Iceberg katalogu Unity

Někteří klienti Icebergu se můžou připojit k katalogu ICEBERG REST. Unity Catalog poskytuje implementaci rozhraní API katalogu Iceberg REST jen pro čtení pro tabulky Delta s povoleným UniFormem pomocí koncového bodu /api/2.1/unity-catalog/iceberg. Podrobnosti o použití tohoto rozhraní REST API najdete v specifikaci rozhraní ICEBERG REST API.

Klienti, kteří znají podporu rozhraní API katalogu Iceberg, zahrnují Apache Spark, Flink a Trino. Musíte nakonfigurovat přístup k podkladovému cloudovému úložišti objektů obsahujícímu tabulku Delta s povoleným uniformem. Podrobnosti o konfiguraci najdete v dokumentaci ke klientovi čtenáře Icebergu.

Musíte vygenerovat a nakonfigurovat osobní přístupový token Azure Databricks, aby se ostatní služby mohly připojit ke katalogu Unity. Přehled najdete v tématu Ověřování pro automatizaci Azure Databricks.

Následuje příklad nastavení pro konfiguraci OSS Apache Sparku pro čtení UniFormu jako Icebergu:

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.unity"="org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.unity.catalog-impl": "org.apache.iceberg.rest.RESTCatalog",
"spark.sql.catalog.unity.uri": "<api-root>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.unity.token":"<your_personal_access_token>",
"spark.sql.catalog.unity.io-impl": "org.apache.iceberg.aws.s3.S3FileIO

Nahraďte úplnou adresu URL pracovního prostoru, ve kterém jste vygenerovali osobní přístupový token pro <api-root>.

Poznámka:

Při dotazování tabulek v Katalogu Unity pomocí této metody používají identifikátory objektů následující vzor:

unity.<catalog-name>.<schema-name>.<table-name>

Tento vzor používá stejné třívrstvé názvy, které jsou přítomné v katalogu Unity, ale přidá další předponu unity.

Verze tabulek Delta a Iceberg

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

Obecně platí, že verze tabulek Iceberg a Delta nejsou zarovnány časovým razítkem potvrzení nebo ID verze. Pokud chcete ověřit, která verze tabulky Delta odpovídá dané verzi tabulky Iceberg, můžete použít odpovídající vlastnosti tabulky nastavené v tabulce Iceberg. Viz Kontrola stavu generování metadat Icebergu.

Omezení

Jsou to následující omezení:

  • UniForm nefunguje u tabulek s povolenými vektory odstranění. Podívejte se, co jsou vektory odstranění?
  • Tabulky Delta s povoleným uniformem nepodporují VOID typy.
  • Klienti Icebergu můžou číst pouze z uniformu. Zápisy nejsou podporovány.
  • Klienti čtenáře Icebergu můžou mít jednotlivá omezení bez ohledu na UniForm. Prohlédněte si dokumentaci ke zvolenému klientovi.
  • Příjemci rozdílového sdílení můžou tabulku číst jenom jako Delta, i když je povolený uniformulář.

Kanál změn dat funguje pro klienty Delta, pokud je povolený UniForm, ale nemá podporu v Icebergu.

Některé funkce tabulky Delta Lake používané uniformem nejsou podporovány některými klienty čtečky rozdílového sdílení. Informace o bezpečném sdílení dat a prostředků umělé inteligence pomocí rozdílového sdílení