Čtení tabulek Delta pomocí klientů Iceberg
Tento článek obsahuje podrobnosti o povolení čtení pomocí Icebergu u tabulek uložených v Delta Lake v Azure Databricks. Tato funkce vyžaduje Databricks Runtime 14.3 LTS nebo vyšší.
Poznámka:
Tato funkce se dříve jmenovala Delta Lake Universal Format (UniForm).
Externí připojení můžete nakonfigurovat tak, aby katalog Unity fungoval jako katalog Iceberg. Podívejte se na Jak číst tabulky Databricks pomocí klientů Iceberg.
Jak funguje čtení Iceberg (UniForm)?
Delta Lake i Iceberg se skládají z datových souborů Parquet a vrstvy metadat. Povolení čtení Icebergu konfiguruje tabulky tak, aby automaticky generovaly metadata Icebergu asynchronně, aniž by museli přepisovat data, aby klienti Icebergu mohli číst tabulky Delta napsané službou Azure Databricks. Jedna kopie datových souborů obsluhuje více formátů.
Důležité
- Tabulky, u kterých jsou povolena čtení Iceberg, používají jako kompresní kodek pro podkladové datové soubory Parquet Zstandard místo Snappy.
- Generování metadat Icebergu 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.
- Dokumentaci ke starší verzi funkce 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:
- 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ů v rámci mapování sloupců Delta Lake.
- Tabulka Delta musí mít
minReaderVersion
>= 2 aminWriterVersion
>= 7. Viz Jak Azure Databricks spravuje kompatibilitu funkcí Delta Lake?. - Zápisy do tabulky musí používat Databricks Runtime 14.3 LTS nebo vyšší.
Poznámka:
Nelze povolit vektory odstranění u tabulky, kde je povoleno načítání technologie Iceberg.
Pomocí REORG
zakažte a vyprázdněte vektory odstranění a povolte čtení z Iceberg u existující tabulky s povolenými vektory odstranění. Viz Povolení nebo upgrade podpory čtení Iceberg pomocí REORG.
Povolte čtení Icebergu (UniForm)
Důležité
Když povolíte čtení Icebergu, přidá se do tabulky funkce zápisového protokolu IcebergCompatV2
. Do tabulek s povolenými čteními Icebergu můžou zapisovat pouze klienti, kteří tuto funkci tabulky podporují. V Azure Databricks musíte k zápisu do povolených tabulek použít Databricks Runtime 14.3 LTS nebo vyšší.
Čtení Icebergu můžete vypnout zrušením nastavení vlastnosti delta.universalFormat.enabledFormats
tabulky. Upgrady na verzi protokolu Delta Lake reader a writer nelze vrátit zpět.
Pokud chcete povolit čtení Icebergu, musíte nastavit následující vlastnosti tabulky:
'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'
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í.
Povolení čtení Iceberg během vytváření tabulky
Mapování sloupců musí být povoleno, aby bylo možné používat dotazy Iceberg. K tomu dochází automaticky, pokud během vytváření tabulky povolíte čtení Icebergu, jako v následujícím příkladu:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Povolení čtení Icebergu u existující tabulky
Ve službě Databricks Runtime 15.4 LTS a vyšší můžete povolit nebo upgradovat čtení Icebergu v existující tabulce pomocí následující syntaxe:
ALTER TABLE table_name SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Povolte nebo upgradujte podporu čtení Icebergu pomocí REORG
Pomocí REORG
můžete povolit čtení a přepis podkladových datových souborů Icebergu, jak je znázorněno v následujícím příkladu:
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
Pokud platí některá z následujících možností, použijte REORG
:
- 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 dojde k generování metadat 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 k vytváření metadat, tabulky Delta s častými potvrzeními mohou seskupit několik potvrzení Delta do jednoho v metadatech Iceberg.
Delta Lake zajišťuje, že na daném výpočetním prostředku probíhá pouze jeden proces generování metadat. Commity, které by aktivovaly druhý souběžný proces generování metadat, jsou úspěšně potvrzena do Delta, ale nevyvolají asynchronní generování metadat v Icebergu. 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.
Obecně platí, že verze tabulek Delta nejsou v souladu s verzemi Iceberg buď č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. 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, 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
- Pomocí rozhraní REST API získáte tabulku.
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 generování metadat UniForm Icebergu, zapisuje do tabulky Delta.
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 vyžadují, abyste zadali cestu k souborům metadat verzí pro registraci externích tabulek Iceberg. Pokaždé, když Azure Databricks 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é mohou narazit na chyby při dotazování tabulek Iceberg pomocí zastaralých verzí nástrojů, když jsou z tabulky Delta odstraněny soubory dat Parquet s VACUUM
.
Omezení
Na všechny tabulky s povolenými Iceberg čteními existují následující omezení:
- Čtení Icebergu nefunguje u tabulek, které mají povolené vektory odstranění. Podívejte se, co jsou vektory odstranění?
- Tabulky Delta s povolenými čteními Iceberg nepodporují typy
VOID
. - 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.
- Příjemci Delta Sharing mohou tabulku číst pouze jako Delta, i když je povoleno čtení Icebergu.
- Některé funkce tabulek Delta Lake používané při čtení Iceberg nejsou podporovány některými klienty Delta Sharing. Podívejte se, co je rozdílové sdílení?
Změna datového kanálu funguje pro klienty Delta, když jsou povolená čtení Icebergu, ale samotná podpora pro ně není v Icebergu k dispozici.