Del via


Bruk Iceberg-tabeller med OneLake

I Microsoft OneLake kan du opprette snarveier til Apache Iceberg-tabellene, slik at de kan brukes på tvers av de mange stoffarbeidsbelastningene. Denne funksjonaliteten er muliggjort gjennom en funksjon kalt metadatavirtualisering, som gjør at Iceberg-tabeller kan tolkes som Delta Lake-tabeller fra snarveiens perspektiv. Når du oppretter en snarvei til en Isfjell-tabellmappe, genererer OneLake automatisk de tilsvarende Delta Lake-metadataene (Delta-loggen) for tabellen, noe som gjør Delta Lake-metadataene tilgjengelige via snarveien.

Viktig

Denne funksjonen er i forhåndsvisning.

Diagram som illustrerer metadatavirtualiseringer for Delta Lake.

Selv om denne artikkelen inneholder veiledning for å skrive Iceberg-tabeller fra Snowflake til OneLake, er denne funksjonen ment å fungere med alle Iceberg-tabeller med Parquet-datafiler.

Opprette en tabellsnarvei til en Isfjell-tabell

Hvis du allerede har en Iceberg-tabell på en lagringsplass som støttes av OneLake-snarveier, følger du disse trinnene for å opprette en snarvei og få Iceberg-tabellen til å vises med Delta Lake-formatet.

  1. Finn isfjellbordet ditt. Finn ut hvor Iceberg-tabellen er lagret, som kan være i Azure Data Lake Storage, OneLake, Amazon S3, Google Cloud Storage eller en S3-kompatibel lagringstjeneste.

    Merk

    Hvis du bruker Snowflake og ikke er sikker på hvor Iceberg-tabellen er lagret, kan du kjøre følgende uttalelse for å se lagringsplassen til Iceberg-tabellen.

    SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('<table_name>');

    Hvis du kjører denne setningen, returneres en bane til metadatafilen for Iceberg-tabellen. Denne banen forteller deg hvilken lagringskonto som inneholder Iceberg-tabellen. Her er for eksempel den relevante informasjonen for å finne banen til en Isfjell-tabell som er lagret i Azure Data Lake Storage:

    {"metadataLocation":"azure://<storage_account_path>/<path_within_storage>/<table_name>/metadata/00001-389700a2-977f-47a2-9f5f-7fd80a0d41b2.metadata.json","status":"success"}

    Isfjelltabellmappen må inneholde en metadata mappe, som i seg selv inneholder minst én fil som slutter .metadata.jsonpå .

  2. Opprett en ny snarvei i Tabeller-området i et ikke-skjemaaktivert lakehouse i Fabric Lakehouse.

    Merk

    Hvis du ser skjemaer som dbo under Tabeller-mappen i lakehouse, er lakehouse skjemaaktivert og er ennå ikke kompatibel med denne funksjonen.

    Skjermbilde som viser menyelementet for hurtigoppretting under Tabeller.

  3. Velg isfjelltabellmappen for målbanen til snarveien. Isfjelltabellmappen inneholder metadata mappene og data .

  4. Når snarveien er opprettet, skal du automatisk se denne tabellen gjenspeiles som et Delta Lake-bord i lakehouse, klar for bruk i hele Fabric.

    Skjermbilde som viser vellykket oppretting av iceberg-tabellsnarvei.

    Hvis den nye hurtigtasten for Iceberg-tabellen ikke vises som en brukbar tabell, kan du kontrollere feilsøkingsdelen .

Skriv et Isfjell-bord til OneLake ved hjelp av Snowflake

Hvis du bruker Snowflake på Azure, kan du skrive Iceberg-tabeller til OneLake ved å følge disse trinnene:

  1. Kontroller at Fabric-kapasiteten er på samme Azure-plassering som Snowflake-forekomsten.

    Identifiser plasseringen av Fabric-kapasiteten som er knyttet til Fabric Lakehouse. Åpne innstillingene for Fabric-arbeidsområdet som inneholder lakehouse.

    Skjermbilde som viser område for stoffkapasitet.

    Kontroller Azure-området for Snowflake-kontoen nederst til venstre i Snowflake på Azure-kontogrensesnittet.

    Skjermbilde som viser Snowflake-kontoområdet.

    Hvis disse områdene er forskjellige, må du bruke en annen stoffkapasitet i samme område som Snowflake-kontoen din.

  2. Åpne menyen for Filer-området i lakehouse, velg Egenskaper, og kopier URL-adressen (HTTPS-banen) til mappen.

    Skjermbilde som viser menyelementet Egenskaper.

  3. Identifiser leier-ID-en for Fabric. Velg brukerprofilen øverst til høyre i stoffgrensesnittet, og hold pekeren over informasjonsboblen ved siden av leiernavnet. Kopier leier-ID-en.

    Skjermbilde som viser leier-ID.

  4. Konfigurer EXTERNAL VOLUME banen til Filer-mappen i lakehouse i Snowflake. Mer informasjon om hvordan du setter opp Snowflake eksterne volumer finner du her.

    Merk

    Snowflake krever at URL-adresseskjemaet er azure://, så pass på at du endrer https:// til azure://.

    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>'
        )
    );
    

    I dette eksemplet lagres alle tabeller som er opprettet ved hjelp av dette eksterne volumet, i Fabric Lakehouse i Files/icebergtables mappen.

  5. Nå som det eksterne volumet er opprettet, kjører du følgende kommando for å hente url-adressen for samtykke og navnet på programmet som Snowflake bruker til å skrive til OneLake. Dette programmet brukes av andre eksterne volumer i Snowflake-kontoen.

    DESC EXTERNAL VOLUME onelake_exvol;
    

    Utdataene for denne kommandoen returnerer egenskapene AZURE_CONSENT_URL og AZURE_MULTI_TENANT_APP_NAME . Noter begge verdiene. Azure-appnavnet for flere enheter ser ut som <name>_<number>, men du trenger bare å registrere <name> delen.

  6. Åpne nettadressen for samtykke fra forrige trinn i en ny nettleserfane. Hvis du vil fortsette, samtykker du til de nødvendige programtillatelsene, hvis du blir bedt om det.

  7. Gå tilbake til Fabric, åpne arbeidsområdet og velg Administrer tilgang, og legg deretter til personer eller grupper. Gi programmet som brukes av Snowflake eksternt volum tillatelsene som trengs for å skrive data til lakehouses i arbeidsområdet. Vi anbefaler at du gir bidragsyterrollen .

  8. Tilbake i Snowflake kan du bruke det nye eksterne volumet til å opprette et Isfjell-bord.

    CREATE OR REPLACE ICEBERG TABLE MYDATABASE.PUBLIC.Inventory (
        InventoryId int,
        ItemName STRING
    )
    EXTERNAL_VOLUME = 'onelake_exvol'
    CATALOG = 'SNOWFLAKE'
    BASE_LOCATION = 'Inventory/';
    

    Med denne setningen opprettes en ny Iceberg-tabellmappe med navnet Inventory i mappebanen som er definert i det eksterne volumet.

  9. Legg til noen data i Iceberg-tabellen.

    INSERT INTO MYDATABASE.PUBLIC.Inventory
    VALUES
    (123456,'Amatriciana');
    
  10. Til slutt, i Tabeller-området i samme lakehouse, kan du opprette en OneLake-snarvei til Iceberg-bordet. Gjennom denne snarveien vises Iceberg-tabellen som et Delta Lake-bord for forbruk på tvers av stoffarbeidsbelastninger.

Feilsøking

Følgende tips kan bidra til å sikre at Iceberg-tabellene er kompatible med denne funksjonen:

Kontrollere mappestrukturen i Iceberg-tabellen

Åpne Iceberg-mappen i det foretrukne lagringsutforskerverktøyet, og kontroller katalogoppføringen av Iceberg-mappen på den opprinnelige plasseringen. Du bør se en mappestruktur som eksemplet nedenfor.

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

Hvis du ikke ser metadatamappen, eller hvis du ikke ser filer med filtypene som vises i dette eksemplet, har du kanskje ikke en riktig generert Isfjell-tabell.

Kontrollere konverteringsloggen

Når en Iceberg-tabell er virtualisert som en Delta Lake-tabell, finner du en mappe med navnet _delta_log/ i hurtigmappen. Denne mappen inneholder Delta Lake-formatets metadata (Delta-loggen) etter vellykket konvertering.

Denne mappen inneholder latest_conversion_log.txt også filen, som inneholder de siste forsøkene på konverteringsfeil eller mislykkede detaljer.

Hvis du vil se innholdet i denne filen etter at du har opprettet snarveien, åpner du menyen for hurtigtasten for Iceberg-tabellen under Tabeller-området i lakehouse og velger Vis filer.

Skjermbilde av menyelementet Vis filer.

Du bør se en struktur som følgende eksempel:

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.

Åpne konverteringsloggfilen for å se den nyeste konverteringstiden eller feildetaljene. Hvis du ikke ser en konverteringsloggfil, ble ikke konvertering forsøkt.

Hvis konvertering ikke ble forsøkt

Hvis du ikke ser en konverteringsloggfil, ble ikke konverteringen forsøkt. Her er to vanlige årsaker til at konvertering ikke er forsøkt:

  • Snarveien ble ikke opprettet på riktig sted.

    For at en snarvei til en Iceberg-tabell skal konverteres til Delta Lake-formatet, må snarveien plasseres direkte under Tabeller-mappen i et ikke-skjemaaktivert lakehouse. Du bør ikke plassere snarveien i Filer-delen eller under en annen mappe hvis du vil at tabellen skal virtualiseres automatisk som en Delta Lake-tabell.

    Skjermbilde som viser riktig plassering av en snarvei i Tabeller-mappen.

  • Snarveiens målbane er ikke isfjellmappebanen.

    Når du oppretter snarveien, må mappebanen du velger i mållagringsplasseringen bare være Isfjell-tabellmappen. Denne mappen inneholder mappene metadata og data .

    Skjermbilde som viser innholdet i en snarveismålbane under oppretting av snarveier.

Begrensninger og hensyn

Husk følgende midlertidige begrensninger når du bruker denne funksjonen:

  • Datatyper som støttes

    Følgende isfjellkolonnedatatyper tilordnes til tilsvarende Delta Lake-typer ved hjelp av denne funksjonen.

    Isfjellkolonnetype Kolonnetype for Delta Lake Kommentarer
    int integer
    long long Se typebreddeproblem.
    float float
    double double Se typebreddeproblem.
    decimal(P, S) decimal(P, S) Se typebreddeproblem.
    boolean boolean
    date date
    timestamp timestamp_ntz Isfjell-datatypen timestamp inneholder ikke informasjon om tidssone. timestamp_ntz Delta Lake-typen støttes ikke fullt ut på tvers av stoffarbeidsbelastninger. Vi anbefaler bruk av tidsstempler med tidssoner inkludert.
    timestamptz timestamp Hvis du vil bruke denne typen i Snowflake, angir du timestamp_ltz som kolonnetype under oppretting av isfjelltabell. Mer informasjon om Iceberg-datatyper som støttes i Snowflake finner du her.
    string string
    binary binary
  • Typebreddeproblem

    Hvis du bruker Snowflake til å skrive isfjelltabellen og tabellen inneholder kolonnetyper INT64, doubleeller Decimal med presisjon >= 10, kan det hende at den resulterende virtuelle Delta Lake-tabellen ikke kan forbrukes av alle Fabric-motorer. Du kan se feil, for eksempel:

    Parquet column cannot be converted in file ... Column: [ColumnA], Expected: decimal(18,4), Found: INT32.
    

    Vi jobber med en løsning på dette problemet.

    Løsning: Hvis du bruker forhåndsvisningsgrensesnittet for Lakehouse-tabellen og ser dette problemet, kan du løse denne feilen ved å bytte til SQL Endpoint-visningen (øverst til høyre, velge Lakehouse-visning, bytte til SQL Endpoint) og forhåndsvise tabellen derfra. Hvis du deretter bytter tilbake til Lakehouse-visningen, skal forhåndsvisningen av tabellen vises riktig.

    Hvis du kjører en Spark-notatblokk eller jobb og støter på dette problemet, kan du løse denne feilen ved å angi spark.sql.parquet.enableVectorizedReader Spark-konfigurasjonen til false. Her er et eksempel på PySpark-kommando for å kjøre i en Spark-notatblokk:

    spark.conf.set("spark.sql.parquet.enableVectorizedReader","false")
    
  • Metadatalagring for isfjelltabellen er ikke bærbar

    Metadatafilene i en Iceberg-tabell refererer til hverandre ved hjelp av absolutte banereferanser. Hvis du kopierer eller flytter innholdet i en isfjelltabells mappe til et annet sted uten å skrive om metadatafilene for Iceberg, blir tabellen uleselig av Iceberg-lesere, inkludert denne OneLake-funksjonen.

    Midlertidig løsning:

    Hvis du trenger å flytte Iceberg-tabellen til et annet sted for å bruke denne funksjonen, kan du bruke verktøyet som opprinnelig skrev Iceberg-tabellen til å skrive et nytt isfjellbord på ønsket sted.

  • Isfjelltabeller må være dypere enn rotnivå

    Isfjelltabellmappen må være plassert i en katalog dypere enn samlings- eller beholdernivå. Isfjelltabeller som er lagret direkte i rotkatalogen i en samling eller beholder, kan ikke virtualiseres til Delta Lake-formatet.

    Vi jobber med en forbedring for å fjerne dette kravet.

    Midlertidig løsning:

    Kontroller at alle Iceberg-tabeller lagres i en katalog dypere enn rotkatalogen til en samling eller beholder.

  • Isfjelltabellmapper må bare inneholde ett sett med metadatafiler

    Hvis du slipper og gjenskaper et Isfjell-bord i Snowflake, ryddes ikke metadatafilene opp. Denne virkemåten UNDROP støtter funksjonen i Snowflake. Men fordi snarveien peker direkte til en mappe og mappen nå har flere sett med metadatafiler i seg, kan vi ikke konvertere tabellen før du fjerner metadatafilene for den gamle tabellen.

    For øyeblikket er konvertering forsøkt i dette scenarioet, noe som kan føre til at gammelt tabellinnhold og skjemainformasjon vises i den virtualiserte Delta Lake-tabellen.

    Vi arbeider med en løsning der konvertering mislykkes hvis mer enn ett sett med metadatafiler finnes i metadatamappen for Iceberg-tabellen.

    Midlertidig løsning:

    Slik sikrer du at den konverterte tabellen gjenspeiler riktig versjon av tabellen:

    • Sørg for at du ikke lagrer mer enn én Isfjell-tabell i samme mappe.
    • Rydd opp i innholdet i en Iceberg-tabellmappe etter at du har sluppet den, før du oppretter tabellen på nytt.
  • Metadataendringer gjenspeiles ikke umiddelbart

    Hvis du gjør metadataendringer i Iceberg-tabellen, for eksempel å legge til en kolonne, slette en kolonne, gi nytt navn til en kolonne eller endre en kolonnetype, kan det hende at tabellen ikke konverteres på nytt før en dataendring er gjort, for eksempel å legge til en rad med data.

    Vi jobber med en løsning som henter den riktige nyeste metadatafilen som inneholder den nyeste metadataendringen.

    Midlertidig løsning:

    Når du har gjort skjemaendringen i Iceberg-tabellen, kan du legge til en rad med data eller gjøre andre endringer i dataene. Etter denne endringen skal du kunne oppdatere og se den nyeste visningen av tabellen i Fabric.

  • Skjemaaktiverte arbeidsområder støttes ennå ikke

    Hvis du oppretter en iceberg-snarvei i et skjemaaktivert lakehouse, forekommer ikke konvertering for denne snarveien.

    Vi jobber med en forbedring for å fjerne denne begrensningen.

    Midlertidig løsning:

    Bruk et ikke-skjemaaktivert lakehouse med denne funksjonen. Du kan konfigurere denne innstillingen under oppretting av lakehouse.

  • Begrensning for områdetilgjengelighet

    Funksjonen er ennå ikke tilgjengelig i følgende områder:

    • Qatar, sentralt
    • Vest-Norge

    Midlertidig løsning:

    Arbeidsområder som er knyttet til stoffkapasiteter i andre områder, kan bruke denne funksjonen. Se den fullstendige listen over områder der Microsoft Fabric er tilgjengelig.

  • Private koblinger støttes ikke

    Denne funksjonen støttes for øyeblikket ikke for leiere eller arbeidsområder som har private koblinger aktivert.

    Vi jobber med en forbedring for å fjerne denne begrensningen.

  • Størrelsesbegrensning for tabell

    Vi har en midlertidig begrensning på størrelsen på Iceberg-tabellen som støttes av denne funksjonen. Maksimalt antall parquet-datafiler som støttes, er omtrent 5000 datafiler, eller omtrent 1 milliard rader, avhengig av hvilken grense som oppstår først.

    Vi jobber med en forbedring for å fjerne denne begrensningen.

  • OneLake-snarveier må være i samme område

    Vi har en midlertidig begrensning på bruken av denne funksjonen med snarveier som peker til OneLake-plasseringer: Målplasseringen for snarveien må være i samme område som selve snarveien.

    Vi jobber med en forbedring for å fjerne dette kravet.

    Midlertidig løsning:

    Hvis du har en OneLake snarvei til et isfjell bord i en annen lakehouse, sørg for at den andre lakehouse er forbundet med en kapasitet i samme område.