Iceberg-táblák használata a OneLake-nal
A Microsoft OneLake-ben parancsikonokat hozhat létre az Apache Iceberg-táblákhoz, amelyek lehetővé teszik azok használatát a Fabric-számítási feladatok széles körében. Ez a funkció egy metaadatvirtualizálás nevű funkcióval érhető el, amely lehetővé teszi, hogy az Iceberg-táblák Delta Lake-táblákként legyenek értelmezve a parancsikon szempontjából. Amikor létrehoz egy Parancsikont egy Iceberg-táblamappához, a OneLake automatikusan létrehozza a megfelelő Delta Lake-metaadatokat (a Delta-naplót), így a Delta Lake metaadatai a parancsikonon keresztül elérhetők lesznek.
Bár ez a cikk útmutatást tartalmaz a Iceberg-táblák Snowflake-ből OneLake-be való írásához, ez a funkció bármely Iceberg-táblával használható Parquet-adatfájlokkal.
Táblázat parancsikonjának létrehozása Iceberg-táblához
Ha már rendelkezik Iceberg-táblával egy OneLake-parancsikonok által támogatott tárolóhelyen, az alábbi lépéseket követve hozzon létre egy parancsikont, és állítsa be az Iceberg-táblázatot Delta Lake formátumban.
Keresse meg a Iceberg-táblát. Keresse meg az Iceberg-táblázat tárolási helyét, amely lehet az Azure Data Lake Storage, a OneLake, az Amazon S3, a Google Cloud Storage vagy egy S3 kompatibilis tárolási szolgáltatás.
Feljegyzés
Ha Snowflake-t használ, és nem tudja biztosan, hogy hol tárolja a Iceberg-táblát, az alábbi utasítással megtekintheti a Iceberg-tábla tárolási helyét.
SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('<table_name>');
Az utasítás futtatása az Iceberg-tábla metaadatfájljának elérési útját adja vissza. Ez az elérési út azt jelzi, hogy melyik tárfiók tartalmazza az Iceberg-táblát. Az Alábbi információk például az Azure Data Lake Storage-ban tárolt Iceberg-tábla elérési útját ismertetik:
{"metadataLocation":"azure://<storage_account_path>/<path_within_storage>/<table_name>/metadata/00001-389700a2-977f-47a2-9f5f-7fd80a0d41b2.metadata.json","status":"success"}
Az Iceberg-táblázat mappának tartalmaznia kell egy
metadata
mappát, amely maga is tartalmaz legalább egy, a következő végződésű.metadata.json
fájlt: .A Fabric lakehouse-ban hozzon létre egy új parancsikont egy nem séma-kompatibilis tóház Táblák területén.
Feljegyzés
Ha olyan sémákat lát, mint
dbo
például a lakehouse Táblák mappájában, akkor a lakehouse sémaalapú, és még nem kompatibilis ezzel a funkcióval.A parancsikon célútvonalához válassza az Iceberg táblamappát. Az Iceberg táblamappája tartalmazza a mappákat és
metadata
adata
mappákat.Miután létrehozta a parancsikont, automatikusan látnia kell, hogy ez a tábla Delta Lake-táblaként jelenik meg a lakehouse-ban, készen áll arra, hogy az egész Hálóban használható legyen.
Ha az új Iceberg-táblázat parancsikonja nem használható táblázatként jelenik meg, ellenőrizze a Hibaelhárítás szakaszt .
Iceberg-táblázat írása a OneLake-be Snowflake használatával
Ha Snowflake-t használ az Azure-ban, az alábbi lépések végrehajtásával Iceberg-táblákat írhat a OneLake-be:
Győződjön meg arról, hogy a Fabric-kapacitás ugyanabban az Azure-helyen található, mint a Snowflake-példány.
Azonosítsa a Fabric lakehouse-hoz társított Fabric-kapacitás helyét. Nyissa meg a lakehouse-t tartalmazó Fabric-munkaterület beállításait.
Az Azure-fiók felületének Snowflake bal alsó sarkában ellenőrizze a Snowflake-fiók Azure-régióját.
Ha ezek a régiók eltérőek, akkor a Snowflake-fiókéval azonos régióban más Hálókapacitást kell használnia.
Nyissa meg a tóház Fájlok területének menüjét, válassza a Tulajdonságok lehetőséget, és másolja ki a mappa URL-címét (a HTTPS-elérési utat).
Azonosítsa a Fabric-bérlő azonosítóját. Válassza ki a felhasználói profilját a Háló felhasználói felületének jobb felső sarkában, és mutasson a bérlő neve melletti információs buborékra. Másolja ki a bérlőazonosítót.
A Snowflake-ban állítsa be
EXTERNAL VOLUME
a lakehouse Files mappájának elérési útját. A Snowflake külső kötetek beállításáról itt talál további információt.Feljegyzés
A hópehelyhez az URL-séma szükséges
azure://
, ezért mindenképpen váltsonhttps://
azure://
rá.CREATE OR REPLACE EXTERNAL VOLUME onelake_exvol STORAGE_LOCATIONS = ( ( NAME = 'onelake_exvol' STORAGE_PROVIDER = 'AZURE' STORAGE_BASE_URL = 'azure://<path_to_Files>/icebergtables' AZURE_TENANT_ID = '<Tenant_ID>' ) );
Ebben a mintában a külső kötet használatával létrehozott táblákat a Fabric lakehouse tárolja a
Files/icebergtables
mappában.A külső kötet létrehozása után futtassa a következő parancsot annak az alkalmazásnak a hozzájárulási URL-címének és nevének lekéréséhez, amelyet a Snowflake használ a OneLake-be való íráshoz. Ezt az alkalmazást a Snowflake-fiók bármely más külső kötete használja.
DESC EXTERNAL VOLUME onelake_exvol;
A parancs kimenete a tulajdonságokat és
AZURE_CONSENT_URL
aAZURE_MULTI_TENANT_APP_NAME
tulajdonságokat adja vissza. Jegyezze fel mindkét értéket. Az Azure több-bérlős alkalmazás neve így<name>_<number>
néz ki, de csak a<name>
részt kell rögzítenie.Nyissa meg az előző lépés hozzájárulási URL-címét egy új böngészőlapon. Ha folytatni szeretné a műveletet, ha a rendszer kéri, adja meg a szükséges alkalmazásengedélyeket.
Nyissa meg a munkaterületet a Hálóban, és válassza a Hozzáférés kezelése, majd a Személyek vagy csoportok hozzáadása lehetőséget. Adja meg a Snowflake külső kötete által használt alkalmazásnak a munkaterületen lévő tóházakba való adatíráshoz szükséges engedélyeket. Javasoljuk, hogy adja meg a közreműködői szerepkört.
A Snowflake-ben az új külső kötet használatával hozzon létre egy Iceberg-táblázatot.
CREATE OR REPLACE ICEBERG TABLE MYDATABASE.PUBLIC.Inventory ( InventoryId int, ItemName STRING ) EXTERNAL_VOLUME = 'onelake_exvol' CATALOG = 'SNOWFLAKE' BASE_LOCATION = 'Inventory/';
Ezzel az utasítással létrejön egy Inventory nevű új Iceberg-táblamappa a külső kötetben definiált mappa elérési útján belül.
Adjon hozzá néhány adatot a Iceberg-táblához.
INSERT INTO MYDATABASE.PUBLIC.Inventory VALUES (123456,'Amatriciana');
Végül, ugyanazon tóház Táblák területén létrehozhat egy OneLake-parancsikont a Iceberg-táblához. Ezzel a parancsikonlal a Iceberg-tábla Delta Lake-táblaként jelenik meg a Fabric-számítási feladatokban való felhasználáshoz.
Hibaelhárítás
Az alábbi tippek segítenek biztosítani, hogy a Iceberg-táblák kompatibilisek legyenek ezzel a funkcióval:
A Iceberg-tábla mappaszerkezetének ellenőrzése
Nyissa meg az Iceberg-mappát az előnyben részesített tárolókezelő eszközben, és ellenőrizze az Iceberg mappa eredeti helyén található könyvtárlistát. Az alábbi példához hasonló mappaszerkezetnek kell megjelennie.
../
|-- MyIcebergTable123/
|-- data/
|-- snow_A5WYPKGO_2o_APgwTeNOAxg_0_1_002.parquet
|-- snow_A5WYPKGO_2o_AAIBON_h9Rc_0_1_003.parquet
|-- metadata/
|-- 00000-1bdf7d4c-dc90-488e-9dd9-2e44de30a465.metadata.json
|-- 00001-08bf3227-b5d2-40e2-a8c7-2934ea97e6da.metadata.json
|-- 00002-0f6303de-382e-4ebc-b9ed-6195bd0fb0e7.metadata.json
|-- 1730313479898000000-Kws8nlgCX2QxoDHYHm4uMQ.avro
|-- 1730313479898000000-OdsKRrRogW_PVK9njHIqAA.avro
|-- snap-1730313479898000000-9029d7a2-b3cc-46af-96c1-ac92356e93e9.avro
|-- snap-1730313479898000000-913546ba-bb04-4c8e-81be-342b0cbc5b50.avro
Ha nem látja a metaadatmappát, vagy ha nem látja a példában látható kiterjesztésű fájlokat, akkor előfordulhat, hogy nem rendelkezik megfelelően létrehozott Iceberg-táblával.
Ellenőrizze a konvertálási naplót
Ha egy Iceberg-tábla Delta Lake-táblaként virtualizálódik, a helyi mappában található egy névvel ellátott _delta_log/
mappa. Ez a mappa tartalmazza a Delta Lake formátum metaadatait (a Delta-naplót) a sikeres átalakítás után.
Ez a mappa tartalmazza a latest_conversion_log.txt
fájlt is, amely tartalmazza a legutóbbi konverzió sikerességét vagy sikertelenségét.
Ha a parancsikon létrehozása után meg szeretné tekinteni a fájl tartalmát, nyissa meg a Iceberg-táblázat parancsikonjának menüjét a lakehouse Táblák területén, és válassza a Fájlok megtekintése lehetőséget.
A következő példához hasonló struktúrát kell látnia:
Tables/
|-- MyIcebergTable123/
|-- data/
|-- <data files>
|-- metadata/
|-- <metadata files>
|-- _delta_log/ <-- Virtual folder. This folder doesn't exist in the original location.
|-- 00000000000000000000.json
|-- latest_conversion_log.txt <-- Conversion log with latest success/failure details.
Nyissa meg a konvertálási naplófájlt a legutóbbi konverziós idő vagy hiba részleteinek megtekintéséhez. Ha nem látja a konvertálási naplófájlt, a konvertálást nem kísérelték meg.
Ha a konvertálást nem kísérelték meg
Ha nem látja a konvertálási naplófájlt, akkor a konvertálást nem kísérelték meg. Két gyakori oka van annak, hogy a konvertálást nem próbálják meg:
A parancsikon nem a megfelelő helyen lett létrehozva.
Ahhoz, hogy egy Iceberg-táblázatra mutató parancsikont Delta Lake formátumra alakíthasson át, a parancsikont közvetlenül egy nem séma-kompatibilis tóház Táblák mappája alá kell helyezni. Ne helyezze a parancsikont a Fájlok szakaszba vagy egy másik mappába, ha azt szeretné, hogy a táblázat automatikusan virtualizálva legyen Delta Lake-táblaként.
A parancsikon célútvonala nem az Iceberg mappa elérési útja.
A parancsikon létrehozásakor a céltárhelyen kiválasztott mappa elérési útja csak a Iceberg táblamappája lehet. Ez a mappa tartalmazza a mappákat és
metadata
adata
mappákat.
Korlátozások és szempontok
A funkció használatakor vegye figyelembe az alábbi ideiglenes korlátozásokat:
Támogatott adattípusok
Az alábbi Iceberg-oszlop adattípusok a funkcióval megfeleltethetők a hozzájuk tartozó Delta Lake-típusoknak.
Jéghegyoszlop típusa Delta Lake oszloptípus Megjegyzések int
integer
long
long
Lásd: Típusszélesség-probléma. float
float
double
double
Lásd: Típusszélesség-probléma. decimal(P, S)
decimal(P, S)
Lásd: Típusszélesség-probléma. boolean
boolean
date
date
timestamp
timestamp_ntz
Az timestamp
Iceberg-adattípus nem tartalmaz időzóna-információkat. Atimestamp_ntz
Delta Lake-típus nem támogatott teljes mértékben a Háló számítási feladatai között. Javasoljuk az időbélyegek használatát az időzónákkal együtt.timestamptz
timestamp
A Snowflake-ben ennek a típusnak a használatához adja meg timestamp_ltz
oszloptípusként az Iceberg-tábla létrehozása során. A Snowflake-ben támogatott Iceberg-adattípusokról itt talál további információt.string
string
binary
binary
Típusszélesség-probléma
Ha Snowflake használatával írja meg a Iceberg-táblázatot, és a táblázat oszloptípusokat
INT64
tartalmaz ,double
vagyDecimal
pontosság = >10, akkor az eredményül kapott virtuális Delta Lake-táblázat nem feltétlenül használható az összes Fabric-motor számára. Az alábbiakhoz hasonló hibák jelentkezhetnek:Parquet column cannot be converted in file ... Column: [ColumnA], Expected: decimal(18,4), Found: INT32.
Dolgozunk a probléma megoldásán.
Megkerülő megoldás: Ha a Lakehouse tábla előnézeti felhasználói felületét használja, és ezt a problémát látja, a hibát az SQL Endpoint nézetre (jobb felső sarokban, a Lakehouse nézet kiválasztásával, az SQL-végpontra való váltással) oldhatja meg, és onnan tekintheti meg a táblázatot. Ha ezután visszaáll a Lakehouse nézetre, a táblázat előnézetének megfelelően kell megjelennie.
Ha Spark-jegyzetfüzetet vagy -feladatot futtat, és ezzel a problémával találkozik, a Hibát a Spark konfigurációjának
spark.sql.parquet.enableVectorizedReader
beállításávalfalse
oldhatja meg. Íme egy példa PySpark-parancsra, amely Spark-jegyzetfüzetben futtatható:spark.conf.set("spark.sql.parquet.enableVectorizedReader","false")
A Iceberg-tábla metaadatainak tárolása nem hordozható
Egy Iceberg-tábla metaadatfájljai abszolút elérésiút-hivatkozásokkal hivatkoznak egymásra. Ha egy Iceberg-tábla mappatartalmat másol vagy helyez át egy másik helyre az Iceberg metaadatfájljainak újraírása nélkül, a táblázat olvashatatlanná válik az Iceberg-olvasók számára, beleértve ezt a OneLake funkciót is.
Megkerülő megoldás:
Ha a funkció használatához át kell helyeznie az Iceberg-táblát egy másik helyre, az eredetileg a Iceberg táblát író eszközzel írjon egy új Iceberg-táblát a kívánt helyre.
A jéghegytábláknak mélyebbnek kell lenniük a gyökérszintnél
A tároló Iceberg táblamappájának egy gyűjtőnél vagy tárolószintnél mélyebb könyvtárban kell lennie. A gyűjtő vagy tároló gyökérkönyvtárában közvetlenül tárolt jéghegytáblák nem virtualizálhatók Delta Lake formátumban.
Dolgozunk egy fejlesztésen, hogy eltávolítsuk ezt a követelményt.
Megkerülő megoldás:
Győződjön meg arról, hogy az Iceberg-táblák egy gyűjtő vagy tároló gyökérkönyvtáránál mélyebb könyvtárban vannak tárolva.
A Jéghegy táblamappáinak csak egy metaadatfájlkészletet kell tartalmazniuk
Ha a Snowflake-ban elvet és újra létrehoz egy Iceberg-táblát, a metaadatfájlok nem törlődnek. Ez a viselkedés támogatja a
UNDROP
Snowflake funkcióját. Mivel azonban a parancsikon közvetlenül egy mappára mutat, és a mappában már több metaadatfájl található, nem konvertálhatjuk a táblát, amíg el nem távolítja a régi tábla metaadatfájljait.Ebben a forgatókönyvben jelenleg a konvertálást kísérlik meg, ami azt eredményezheti, hogy a régi táblatartalmak és sémaadatok megjelennek a virtualizált Delta Lake-táblában.
Dolgozunk egy javításon, amelyben az átalakítás meghiúsul, ha több metaadatfájl található az Iceberg-tábla metaadatmappájában.
Megkerülő megoldás:
Annak érdekében, hogy a konvertált tábla a táblázat megfelelő verzióját tükrözze:
- Győződjön meg arról, hogy egynél több Iceberg-táblát nem tárol ugyanabban a mappában.
- Az Iceberg-táblamappák tartalmát az elvetés után törölje, mielőtt újra létrejön a táblázat.
A metaadatok módosításai nem jelennek meg azonnal
Ha metaadatokat módosít a Iceberg-táblán, például oszlopot ad hozzá, töröl egy oszlopot, átnevez egy oszlopot, vagy módosít egy oszloptípust, akkor előfordulhat, hogy a tábla nem állítható vissza újra, amíg nem történik adatmódosítás, például adatsor hozzáadása.
Dolgozunk egy javításon, amely felveszi a legújabb metaadat-módosítást tartalmazó legújabb metaadatfájlt.
Megkerülő megoldás:
Miután módosította a sémát az Iceberg-táblában, adjon hozzá egy adatsort, vagy módosítsa az adatokat. A módosítás után frissítenie kell, és látnia kell a táblázat legújabb nézetét a Fabricben.
Sémabarát munkaterületek még nem támogatottak
Ha létrehoz egy Iceberg-parancsikont egy séma-kompatibilis tóházban, a parancsikon konvertálása nem történik meg.
Dolgozunk egy fejlesztésen, hogy eltávolítsuk ezt a korlátozást.
Megkerülő megoldás:
Ezzel a funkcióval nem sémaalapú tóházat használhat. Ezt a beállítást a Lakehouse létrehozása során konfigurálhatja.
Régió rendelkezésre állási korlátozása
A funkció még nem érhető el a következő régiókban:
- Közép-Katar
- Nyugat-Norvégia
Megkerülő megoldás:
Ezt a funkciót más régiókban a Fabric-kapacitásokhoz csatolt munkaterületek használhatják. Tekintse meg azoknak a régióknak a teljes listáját, ahol a Microsoft Fabric elérhető.
A privát hivatkozások nem támogatottak
Ez a funkció jelenleg nem támogatott olyan bérlők vagy munkaterületek esetében, amelyeken engedélyezve vannak a privát hivatkozások.
Dolgozunk egy fejlesztésen, hogy eltávolítsuk ezt a korlátozást.
Táblaméret korlátozása
A funkció által támogatott Iceberg-tábla méretére vonatkozó ideiglenes korlátozást alkalmazunk. A Parquet-adatfájlok maximális támogatott száma körülbelül 5000 adatfájl, vagyis nagyjából 1 milliárd sor, amelyik előbb eléri a korlátot.
Dolgozunk egy fejlesztésen, hogy eltávolítsuk ezt a korlátozást.
A OneLake-parancsikonoknak azonos régiónak kell lenniük
A funkció használatára ideiglenes korlátozás vonatkozik a OneLake-helyekre mutató billentyűparancsokkal: a parancsikon célhelyének ugyanabban a régióban kell lennie, mint maga a parancsikon.
Dolgozunk egy fejlesztésen, hogy eltávolítsuk ezt a követelményt.
Megkerülő megoldás:
Ha a OneLake parancsikonja egy másik tóházban található Iceberg-táblához van állítva, győződjön meg arról, hogy a másik tóház ugyanabban a régióban lévő kapacitáshoz van társítva.
bérlői kapcsoló, amely lehetővé teszi a külső hozzáférést
Van egy ideiglenes korlátozásunk, amely megköveteli a "A felhasználók hozzáférhetnek a OneLake-ben tárolt adatokhoz a Fabricen kívüli alkalmazásokkal" bérlőbeállítás engedélyezését.
Ha ez a bérlői beállítás le van tiltva, az Iceberg-táblák Delta Lake formátumú virtualizálása nem fog sikerülni.
Megkerülő megoldás:
Kérje meg a Fabric-bérlő rendszergazdáját, hogy engedélyezze a "A felhasználók hozzáférhetnek a OneLake-ben tárolt adatokhoz a Fabricen kívüli alkalmazásokkal" bérlői beállítást, ha lehetséges.
Az Iceberg tábláknak írás alapú másolásúnak kell, hogy legyenek (nem merge-on-read)
Jelenleg az Iceberg-tábláknak másolatalapú írással kell működniük . Ez azt jelenti, hogy nem tartalmazhatnak törlési fájlokat, vagy nem lehetnek merge-on-read.
A Snowflake jelenleg Iceberg-táblák másolását állítja elő, de más Iceberg-írók más megközelítést követhetnek.
Dolgozunk Iceberg-táblák egyesítésének támogatásán.
Kapcsolódó tartalom
- További információ a Fabric és a OneLake biztonságáról.
- További információ a OneLake-billentyűparancsokról.