Starší verze UniForm IcebergCompatV1
Důležité
Tato dokumentace byla vyřazena a nemusí být aktualizována. Produkty, služby nebo technologie uvedené v tomto obsahu se už nepodporují. Viz Čtení tabulek Delta s klienty Iceberg.
Důležité
Tato funkce je ve verzi Public Preview v Databricks Runtime 13.2 a vyšší.
Delta Universal Format (UniForm) umožňuje číst tabulky Delta s klienty čtenáře Iceberg.
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 Čtěte pomocí koncového bodu katalogu Iceberg ve službě Unity Catalog.
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:
- 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
>= 2 aminWriterVersion
>= 7. Viz Jak Azure Databricks spravuje kompatibilitu funkcí Delta Lake?. - Zápisy do tabulky musí být provedeny pomocí Databricks Runtime 13.2 nebo vyšší.
Povolení delta uniformu
Důležité
Povolení Delta UniForm nastaví vlastnost tabulky Delta IcebergCompatV1
, vlastnost zápisového protokolu. 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 13.2 nebo vyšší.
UniForm můžete vypnout zrušením nastavení vlastnosti delta.universalFormat.enabledFormats
tabulky. Po povolení nelze vypnout mapování sloupců a upgrade na verze protokolu Delta Lake reader a writer nelze vrátit zpět.
Následující vlastnost tabulky umožňuje podporu UniForm pro Iceberg.
iceberg
je jediná platná hodnota.
'delta.universalFormat.enabledFormats' = 'iceberg'
Také musíte povolit mapování sloupců , a IcebergCompatV1
k používání UniForm. Tato nastavení se nastaví 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.universalFormat.enabledFormats' = 'iceberg');
Pokud vytvoříte novou tabulku s příkazem CTAS, musíte ručně zadat mapování sloupců, jako v následujícím příkladu:
CREATE TABLE T
TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.universalFormat.enabledFormats' = 'iceberg')
AS
SELECT * FROM source_table;
Pokud upravujete existující tabulku, musíte zadat všechny tyto vlastnosti, jako v následujícím příkladu:
ALTER TABLE T SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV1' = '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.
Poznámka:
Pokud plánujete používat BigQuery jako klienta čtenáře Icebergu, musíte na Azure Databricks nastavit spark.databricks.delta.write.dataFilesToSubdir
na true
, aby vyhovovaly požadavkům 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 pomocí Průzkumníka katalogu. Tato pole a hodnoty se vrátí také při použití rozhraní REST API k získání tabulky.
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 pro Iceberg, zapisuje 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 REPAIR TABLE.
Č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
Cestu k tomuto souboru najdete pomocí Průzkumníka katalogu. Podrobnosti pro tabulky Delta s povoleným UniFormem obsahují pole pro umístění metadat Iceberg.
Pomocí rozhraní REST API můžete také získat všechny podrobnosti o tabulce, včetně umístění metadat. Použijte následující příkaz:
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 pro čtení Icebergu založení na cestě mohou vyžadovat ruční aktualizaci a obnovení cest k JSON metadatům, aby mohli číst aktuální verze tabulek. 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 s VACUUM
narazit na chyby.
Číst pomocí koncového bodu katalogu Iceberg Unity Catalog
Někteří klienti Icebergu se můžou připojit k katalogu ICEBERG REST. Katalog Unity 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, o kterých je známo, že podporují rozhraní API katalogu Iceberg, zahrnují Apache Spark, Flink a Trino. Musíte nakonfigurovat přístup k základnímu cloudovému objektovému úložišti, které obsahuje tabulku Delta s povoleným UniForm. 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. Viz Autorizace přístupu k prostředkům 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ý jmenný prostor jako v katalogu Unity, ale přidává 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 sladěny ani s potvrzovacím časovým razítkem, ani s 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 povolenou funkcí UniForm nepodporují typy
LIST
,MAP
aVOID
. - 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.
- Klienti čtenáře Iceberg verze 1.2.0 a níže nepodporují
INT96
typ časového razítka napsaný Apache Sparkem. Následující kód použijte v poznámkových blocích, které zapisují do tabulek UniForm, abyste se vyhnuli tomuto omezení:spark.conf.set(“spark.sql.parquet.outputTimestampType”, “TIMESTAMP_MICROS”)
- Veřejná ukázková verze koncového bodu Unity Catalog Iceberg není určena pro rozsáhlé produkční úlohy. Pokud překročíte prahovou hodnotu 5 dotazů za sekundu, může docházet k omezování rychlosti.
Následující funkce Delta Lake fungují pro klienty Delta, pokud je povolený UniForm, ale nemají podporu v Icebergu:
- Změna datového kanálu
- Rozdílové sdílení