Megosztás a következőn keresztül:


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.

Fontos

Ez a funkció előzetes verzióban érhető el.

A Delta Lake metaadatainak virtualizálását szemléltető ábra.

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.

  1. 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.jsonfájlt: .

  2. 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.

    Képernyőkép a Helyi létrehozás menüelemről a Táblázatok területen.

  3. A parancsikon célútvonalához válassza az Iceberg táblamappát. Az Iceberg táblamappája tartalmazza a mappákat és metadata a data mappákat.

  4. 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.

    Képernyőkép a sikeres Iceberg-táblázat parancsikonjának létrehozásáról.

    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:

  1. 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.

    Képernyőkép a Fabric kapacitásrégióról.

    Az Azure-fiók felületének Snowflake bal alsó sarkában ellenőrizze a Snowflake-fiók Azure-régióját.

    Képernyőkép a Snowflake-fiók régiójáról.

    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.

  2. 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).

    Képernyőkép a Tulajdonságok menüelemről.

  3. 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.

    Képernyőkép a bérlőazonosítóról.

  4. 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áltson https://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.

  5. 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 a AZURE_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.

  6. 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.

  7. 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.

  8. 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.

  9. Adjon hozzá néhány adatot a Iceberg-táblához.

    INSERT INTO MYDATABASE.PUBLIC.Inventory
    VALUES
    (123456,'Amatriciana');
    
  10. 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.

Képernyőkép: Fájlok megtekintése menüelem.

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.

    Képernyőkép egy parancsikon megfelelő elhelyezéséről a Táblák mappában.

  • 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 a data mappákat.

    Képernyőkép egy parancsikon-célútvonal tartalmáról a parancsikon létrehozásakor.

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. A timestamp_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 INT64tartalmaz , doublevagy Decimal 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.enableVectorizedReaderbeállításával false 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.