Sdílet prostřednictvím


Čtení tabulek Delta s klienty Iceberg pomocí uniformu

Delta Lake Universal Format (UniForm) umožňuje číst tabulky Delta s klienty čtenáře Icebergu. 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.

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 Iceberg používá Zstandard místo Snappy jako kodek komprese 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.

Jak uniform funguje?

UniForm využívá skutečnost, že Delta Lake a 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. Jedna kopie datových souborů obsluhuje více formátů.

Požadavky

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

Poznámka:

U tabulky s povoleným UniForm Icebergem nelze povolit vektory odstranění.

Umožňuje REORG zakázat a vyprázdnit vektory odstranění a zároveň povolit UniForm Iceberg v existující tabulce s povolenými vektory odstranění. Viz Povolení nebo upgrade pomocí REORG.

Povolení UniForm Icebergu

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. Upgrady na verzi protokolu Delta Lake reader a writer nelze vrátit zpět.

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

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

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.

Seznam omezení najdete v tématu Omezení.

Povolení při vytváření tabulky

Aby bylo možné použít UniForm Iceberg, musí být povolené mapování sloupců. K tomu dochází automaticky, pokud během vytváření tabulky povolíte UniForm Iceberg, jako v následujícím příkladu:

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

Povolení úpravou existující tabulky

Ve službě Databricks Runtime 15.4 LTS a vyšší můžete povolit nebo upgradovat UniForm Iceberg v existující tabulce pomocí následující syntaxe:

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

Povolení nebo upgrade pomocí REORG

Můžete použít REORG k povolení UniForm Iceberg a přepsání podkladových datových souborů, jako v následujícím příkladu:

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

Použijte REORG , pokud platí některá z následujících možností:

  • Vaše tabulka obsahuje povolené 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.

Kdy UniForm generuje metadata Icebergu?

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.

Poznámka:

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 přidruženým ke generování metadat, tabulky Delta s častými potvrzeními můžou seskupit několik potvrzení Delta do jednoho potvrzení do metadat Icebergu.

Delta Lake zajišťuje, že v daném výpočetním prostředku probíhá kdykoli pouze jeden proces generování metadat. Potvrzení, která by aktivovala druhý souběžný proces generování metadat ú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.

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.

Obecně platí, že verze tabulek Delta se neshodují s verzemi Iceberg podle časového razítka 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. Viz Kontrola stavu generování metadat Icebergu.

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. Podrobnosti o konfiguraci najdete v dokumentaci ke klientovi čtenáře Icebergu.

Ověřování a autorizace

Pro přístup k datům zaregistrovaným v katalogu Unity s využitím koncového api/2.1/unity-catalog/iceberg bodu z externích služeb existují dva požadavky:

  • Ověřování pomocí OAuth nebo osobního přístupového tokenu Databricks Viz Ověřování přístupu k prostředkům Azure Databricks.
  • Povolte pro metastore přístup k externím datům. Tím se omezí přístup uživatelům, kteří mají EXTERNAL USE SCHEMA oprávnění ke schématu, ze kterého rozhraní API čte. Viz Řízení externího přístupu k datům v katalogu Unity.

Příklad konfigurace Apache Sparku

Následuje příklad nastavení, která se používají ke 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.type": "rest",
"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.warehouse": "<uc_catalog_name>"

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

Při dotazování tabulek v Katalogu Unity pomocí konfigurací Sparku mějte na paměti následující skutečnosti:

  • Identifikátory objektů používají vzor unity.<schema-name>.<table-name>.

    Tento vzor používá stejný tříúrovňový obor názvů, který se používá v katalogu Unity, ale s názvem katalogu nahrazen .unity

  • Potřebujete "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" pouze v případě, že používáte uložené procedury specifické pro Iceberg.

  • Pokud pro úložiště používáte poskytovatele cloudu, musíte jako balíčky Spark přidat soubory JAR sady iceberg specifických pro cloud:

    • AWS: org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
    • Azure: org.apache.iceberg:iceberg-azure-bundle:<iceberg-version>
    • GCP: org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>

    Podrobnosti najdete v dokumentaci k integraci Iceberg AWS pro Spark.

Příklad curl rozhraní REST API

K načtení tabulky můžete použít také volání rozhraní REST API, jako je volání rozhraní REST API v tomto příkladu curl:

curl -X GET -H "Authentication: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg/v1/catalogs/<uc_catalog_name>/namespaces/<uc_schema_name>/tables/<uc_table_name>

Pak by se měla zobrazit odpověď podobná této:

{
  "metadata-location": "abfss://my-container@my-storage-account.dfs.core.windows.net/path/to/iceberg/table/metadata/file",
  "metadata": <iceberg-table-metadata-json>,
  "config": {
    "expires-at-ms": "<epoch-ts-in-millis>",
    "adls.sas-token.<storage-account-name>.dfs.core.windows.net": "<temporary-sas-token>"
  }
}

Poznámka:

Pole expires-at-ms v odpovědi označuje dobu vypršení platnosti přihlašovacích údajů a má výchozí dobu vypršení platnosti jedné hodiny. Pokud chcete dosáhnout lepšího výkonu, požádejte klienta, aby přihlašovací údaje ukažovaly do doby vypršení platnosti, než si vyžádá nový.

Omezení

Pro všechny tabulky UniForm existují 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ář.
  • Některé funkce tabulky Delta Lake používané UniForm Iceberg nejsou podporovány některými klienty čtečky sdílení Delta. Podívejte se, co je rozdílové sdílení?

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