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.
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.
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.json
på .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.Velg isfjelltabellmappen for målbanen til snarveien. Isfjelltabellmappen inneholder
metadata
mappene ogdata
.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.
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:
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.
Kontroller Azure-området for Snowflake-kontoen nederst til venstre i Snowflake på Azure-kontogrensesnittet.
Hvis disse områdene er forskjellige, må du bruke en annen stoffkapasitet i samme område som Snowflake-kontoen din.
Åpne menyen for Filer-området i lakehouse, velg Egenskaper, og kopier URL-adressen (HTTPS-banen) til mappen.
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.
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 endrerhttps://
tilazure://
.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.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
ogAZURE_MULTI_TENANT_APP_NAME
. Noter begge verdiene. Azure-appnavnet for flere enheter ser ut som<name>_<number>
, men du trenger bare å registrere<name>
delen.Å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.
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 .
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.
Legg til noen data i Iceberg-tabellen.
INSERT INTO MYDATABASE.PUBLIC.Inventory VALUES (123456,'Amatriciana');
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.
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.
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
ogdata
.
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
,double
ellerDecimal
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 tilfalse
. 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.
Relatert innhold
- Mer informasjon om Fabric og OneLake sikkerhet.
- Mer informasjon om OneLake-snarveier.