Č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:
- Tabulka Delta musí být zaregistrovaná v katalogu Unity. Podporují se spravované i externí tabulky.
- Tabulka musí mít povolené mapování sloupců. Viz Přejmenování a vyřazení sloupců s mapováním sloupců Delta Lake.
- Tabulka Delta musí mít
minReaderVersion
>hodnotu = 2 aminWriterVersion
>= 7. Podívejte se, jak Azure Databricks spravuje kompatibilitu funkcí Delta Lake? - Zápisy do tabulky musí používat Databricks Runtime 14.3 LTS nebo vyšší.
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 IcebergCompatV2
tabulky 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živatelemDESCRIBE 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živatelemDESCRIBE 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.
- AWS:
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.