Udostępnij za pośrednictwem


Używanie tabel góry lodowej z usługą OneLake

W usłudze Microsoft OneLake możesz tworzyć skróty do tabel Platformy Apache Iceberg, umożliwiając ich użycie w wielu różnych obciążeniach sieci szkieletowej. Ta funkcja jest możliwa dzięki funkcji nazywanej wirtualizacją metadanych, która umożliwia interpretowanie tabel góry lodowej jako tabel usługi Delta Lake z perspektywy skrótu. Podczas tworzenia skrótu do folderu tabeli Góry lodowej usługa OneLake automatycznie generuje odpowiednie metadane usługi Delta Lake (dziennik delta) dla tej tabeli, dzięki czemu metadane usługi Delta Lake będą dostępne za pomocą skrótu.

Ważne

Ta funkcja jest dostępna w wersji zapoznawczej.

Diagram ilustrujący wirtualizację metadanych usługi Delta Lake.

Chociaż ten artykuł zawiera wskazówki dotyczące pisania tabel góry lodowej z snowflake do oneLake, ta funkcja jest przeznaczona do pracy z dowolnymi tabelami Góry Lodowej z plikami danych Parquet.

Tworzenie skrótu do tabeli góry lodowej

Jeśli masz już tabelę Góry lodowej w lokalizacji magazynu obsługiwanej przez skróty OneLake, wykonaj następujące kroki, aby utworzyć skrót i wyświetlić tabelę Góry lodowej z formatem usługi Delta Lake.

  1. Znajdź tabelę Góry Lodowej. Znajdź miejsce przechowywania tabeli Iceberg, która może znajdować się w usłudze Azure Data Lake Storage, OneLake, Amazon S3, Google Cloud Storage lub usłudze magazynu zgodnej z usługą S3.

    Uwaga

    Jeśli używasz usługi Snowflake i nie masz pewności, gdzie jest przechowywana tabela Iceberg, możesz uruchomić następującą instrukcję, aby wyświetlić lokalizację przechowywania tabeli Iceberg.

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

    Uruchomienie tej instrukcji zwraca ścieżkę do pliku metadanych dla tabeli Iceberg. Ta ścieżka informuje, które konto magazynu zawiera tabelę Góry lodowej. Oto na przykład odpowiednie informacje, aby znaleźć ścieżkę tabeli Góry lodowej przechowywanej w usłudze 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"}

    Folder tabeli Iceberg musi zawierać metadata folder, który zawiera co najmniej jeden plik kończący się na ..metadata.json

  2. W usłudze Fabric lakehouse utwórz nowy skrót w obszarze Tabele w nieobsługiwowanym schemacie lakehouse.

    Uwaga

    Jeśli zobaczysz schematy, takie jak dbo w folderze Tables usługi Lakehouse, usługa Lakehouse jest włączona w schemacie i nie jest jeszcze zgodna z tą funkcją.

    Zrzut ekranu przedstawiający element menu tworzenia skrótów w obszarze Tabele.

  3. Aby uzyskać ścieżkę docelową skrótu, wybierz folder Tabela Góry lodowej. Folder tabeli Góry lodowej zawiera metadata foldery i data .

  4. Po utworzeniu skrótu ta tabela powinna zostać automatycznie odzwierciedlona jako tabela usługi Delta Lake w usłudze Lakehouse, gotowa do użycia w całej sieci szkieletowej.

    Zrzut ekranu przedstawiający pomyślne utworzenie skrótu do tabeli Iceberg.

    Jeśli nowy skrót do tabeli Iceberg nie jest wyświetlany jako tabela do użycia, zapoznaj się z sekcją Rozwiązywanie problemów .

Pisanie tabeli góry lodowej w onelake przy użyciu snowflake

Jeśli używasz usługi Snowflake na platformie Azure, możesz napisać tabele Góry lodowej w usłudze OneLake, wykonując następujące kroki:

  1. Upewnij się, że pojemność sieci szkieletowej znajduje się w tej samej lokalizacji platformy Azure co wystąpienie usługi Snowflake.

    Zidentyfikuj lokalizację pojemności sieci szkieletowej skojarzonej z usługą Fabric lakehouse. Otwórz ustawienia obszaru roboczego Sieć szkieletowa, który zawiera usługę Lakehouse.

    Zrzut ekranu przedstawiający region pojemności sieci szkieletowej.

    W lewym dolnym rogu interfejsu konta usługi Snowflake na koncie platformy Azure sprawdź region świadczenia usługi Azure konta snowflake.

    Zrzut ekranu przedstawiający region konta snowflake.

    Jeśli te regiony są inne, musisz użyć innej pojemności sieci szkieletowej w tym samym regionie co konto usługi Snowflake.

  2. Otwórz menu obszaru Pliki w usłudze Lakehouse, wybierz pozycję Właściwości i skopiuj adres URL (ścieżkę HTTPS) tego folderu.

    Zrzut ekranu przedstawiający element menu Właściwości.

  3. Zidentyfikuj identyfikator dzierżawy sieci szkieletowej. Wybierz swój profil użytkownika w prawym górnym rogu interfejsu użytkownika sieci szkieletowej i umieść wskaźnik myszy na bąbelku informacji obok nazwy dzierżawy. Skopiuj identyfikator dzierżawy.

    Zrzut ekranu przedstawiający identyfikator dzierżawy.

  4. W aplikacji Snowflake skonfiguruj ścieżkę EXTERNAL VOLUME do folderu Files w twoim lakehouse. Więcej informacji na temat konfigurowania woluminów zewnętrznych snowflake można znaleźć tutaj.

    Uwaga

    Snowflake wymaga, aby schemat adresu URL był azure://, więc pamiętaj, aby zmienić wartość https:// na 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>'
        )
    );
    

    W tym przykładzie wszystkie tabele utworzone przy użyciu tego woluminu zewnętrznego są przechowywane w usłudze Fabric lakehouse w folderze Files/icebergtables .

  5. Po utworzeniu woluminu zewnętrznego uruchom następujące polecenie, aby pobrać adres URL zgody i nazwę aplikacji używanej przez usługę Snowflake do zapisu w usłudze OneLake. Ta aplikacja jest używana przez dowolny inny wolumin zewnętrzny na koncie snowflake.

    DESC EXTERNAL VOLUME onelake_exvol;
    

    Dane wyjściowe tego polecenia zwracają AZURE_CONSENT_URL właściwości i AZURE_MULTI_TENANT_APP_NAME . Zanotuj obie wartości. Nazwa aplikacji wielodostępnych platformy Azure wygląda następująco <name>_<number>: , ale wystarczy przechwycić <name> tylko część.

  6. Otwórz adres URL zgody z poprzedniego kroku na nowej karcie przeglądarki. Jeśli chcesz kontynuować, wyrażasz zgodę na wymagane uprawnienia aplikacji, jeśli zostanie wyświetlony monit.

  7. Wróć do obszaru szkieletowego, otwórz obszar roboczy i wybierz pozycję Zarządzaj dostępem, a następnie dodaj osoby lub grupy. Udziel aplikacji używanej przez wolumin zewnętrzny Snowflake uprawnienia wymagane do zapisywania danych w magazynach typu lakehouse w obszarze roboczym. Zalecamy przyznanie roli Współautor .

  8. Wróć do snowflake, użyj nowego woluminu zewnętrznego, aby utworzyć tabelę Góry lodowej.

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

    Dzięki tej instrukcji nowy folder tabeli Iceberg o nazwie Inventory jest tworzony w ścieżce folderu zdefiniowanej w woluminie zewnętrznym.

  9. Dodaj dane do tabeli Góry Lodowej.

    INSERT INTO MYDATABASE.PUBLIC.Inventory
    VALUES
    (123456,'Amatriciana');
    
  10. Na koniec w obszarze Tabele tego samego jeziora możesz utworzyć skrót OneLake do tabeli Góry Lodowej. Za pomocą tego skrótu tabela Iceberg jest wyświetlana jako tabela usługi Delta Lake do użycia w obciążeniach sieci szkieletowej.

Rozwiązywanie problemów

Poniższe wskazówki mogą pomóc w upewnieniu się, że tabele góry lodowej są zgodne z tą funkcją:

Sprawdzanie struktury folderów tabeli Góry Lodowej

Otwórz folder Iceberg w preferowanym narzędziu eksploratora magazynu i sprawdź listę katalogów folderu Iceberg w oryginalnej lokalizacji. Powinna zostać wyświetlona struktura folderów podobna do poniższego przykładu.

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

Jeśli nie widzisz folderu metadanych lub nie widzisz plików z rozszerzeniami przedstawionymi w tym przykładzie, być może nie masz poprawnie wygenerowanej tabeli Góry lodowej.

Sprawdzanie dziennika konwersji

Gdy tabela Góry lodowej jest zwirtualizowana jako tabela usługi Delta Lake, folder o nazwie _delta_log/ można znaleźć w folderze skrótów. Ten folder zawiera metadane formatu usługi Delta Lake (dziennik różnicowy) po pomyślnej konwersji.

Ten folder zawiera latest_conversion_log.txt również plik zawierający szczegóły powodzenia lub niepowodzenia najnowszej próby konwersji.

Aby wyświetlić zawartość tego pliku po utworzeniu skrótu, otwórz menu skrótu do tabeli Góry lodowej w obszarze Tabele w lakehouse i wybierz pozycję Wyświetl pliki.

Zrzut ekranu Przedstawiający element menu Wyświetl pliki.

Powinna zostać wyświetlona struktura podobna do poniższego przykładu:

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.

Otwórz plik dziennika konwersji, aby wyświetlić najnowszy czas konwersji lub szczegóły błędu. Jeśli nie widzisz pliku dziennika konwersji, konwersja nie została podjęta.

Jeśli konwersja nie została podjęta

Jeśli nie widzisz pliku dziennika konwersji, konwersja nie została podjęta. Oto dwie typowe przyczyny, dla których konwersja nie jest podejmowana:

  • Skrót nie został utworzony we właściwym miejscu.

    Aby skrót do tabeli Góry Lodowej został przekonwertowany na format usługi Delta Lake, skrót należy umieścić bezpośrednio w folderze Tables nieobsługiwanego przez schemat lakehouse. Nie należy umieszczać skrótu w sekcji Pliki lub w innym folderze, jeśli chcesz, aby tabela została automatycznie zwirtualizowana jako tabela usługi Delta Lake.

    Zrzut ekranu przedstawiający poprawne umieszczenie skrótu w folderze Tables.

  • Ścieżka docelowa skrótu nie jest ścieżką folderu Iceberg.

    Podczas tworzenia skrótu ścieżka folderu wybrana w docelowej lokalizacji magazynu musi być tylko folderem tabeli Iceberg. Ten folder zawiera foldery metadata i data .

    Zrzut ekranu przedstawiający zawartość ścieżki docelowej skrótu podczas tworzenia skrótów.

Ograniczenia i istotne zagadnienia

Podczas korzystania z tej funkcji należy pamiętać o następujących tymczasowych ograniczeniach:

  • Obsługiwane typy danych

    Następujące typy danych kolumny Iceberg mapują na odpowiadające im typy usługi Delta Lake przy użyciu tej funkcji.

    Typ kolumny Góry lodowej Typ kolumny usługi Delta Lake Komentarze
    int integer
    long long Zobacz Problem z szerokością typu.
    float float
    double double Zobacz Problem z szerokością typu.
    decimal(P, S) decimal(P, S) Zobacz Problem z szerokością typu.
    boolean boolean
    date date
    timestamp timestamp_ntz timestamp Typ danych Góry Lodowej nie zawiera informacji o strefie czasowej. timestamp_ntz Typ usługi Delta Lake nie jest w pełni obsługiwany w obciążeniach sieci szkieletowej. Zalecamy używanie sygnatur czasowych z uwzględnionych stref czasowych.
    timestamptz timestamp W obszarze Snowflake, aby użyć tego typu, określ timestamp_ltz jako typ kolumny podczas tworzenia tabeli Iceberg. Więcej informacji na temat typów danych góry lodowej obsługiwanych w usłudze Snowflake można znaleźć tutaj.
    string string
    binary binary
  • Problem z szerokością typu

    Jeśli używasz usługi Snowflake do zapisania tabeli Iceberg, a tabela zawiera typy INT64kolumn , doublelub Decimal z dokładnością >= 10, wynikowa wirtualna tabela usługi Delta Lake może nie być używana przez wszystkie aparaty sieci szkieletowej. Mogą wystąpić błędy, takie jak:

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

    Pracujemy nad rozwiązaniem tego problemu.

    Obejście: Jeśli używasz interfejsu użytkownika w wersji zapoznawczej tabeli Lakehouse i widzisz ten problem, możesz rozwiązać ten błąd, przełączając się do widoku punktów końcowych SQL (w prawym górnym rogu wybierz widok Lakehouse, przełącz się do punktu końcowego SQL) i wyświetlając podgląd tabeli z tego miejsca. Jeśli następnie przełączysz się z powrotem do widoku lakehouse, podgląd tabeli powinien być wyświetlany prawidłowo.

    Jeśli używasz notesu platformy Spark lub zadania i napotkasz ten problem, możesz rozwiązać ten błąd, ustawiając konfigurację spark.sql.parquet.enableVectorizedReader platformy Spark na falsewartość . Oto przykładowe polecenie PySpark do uruchomienia w notesie platformy Spark:

    spark.conf.set("spark.sql.parquet.enableVectorizedReader","false")
    
  • Magazyn metadanych tabeli góry lodowej nie jest przenośny

    Pliki metadanych tabeli Góry lodowej odwołują się do siebie przy użyciu odwołań ścieżki bezwzględnej. Jeśli skopiujesz lub przeniesiesz zawartość folderu tabeli Iceberg do innej lokalizacji bez ponownego zapisywania plików metadanych Góry Lodowej, tabela stanie się nieczytelna przez czytelników góry lodowej, w tym tę funkcję OneLake.

    Obejście:

    Jeśli musisz przenieść tabelę Góry Lodowej do innej lokalizacji, aby użyć tej funkcji, użyj narzędzia, które pierwotnie napisało tabelę Góry lodowej, aby napisać nową tabelę Góry Lodowej w żądanej lokalizacji.

  • Stoły góry lodowej muszą być głębsze niż poziom korzeni

    Folder tabeli Iceberg w magazynie musi znajdować się w katalogu głębiej niż poziom zasobnika lub kontenera. Tabele góry lodowej przechowywane bezpośrednio w katalogu głównym zasobnika lub kontenera mogą nie być zwirtualizowane w formacie usługi Delta Lake.

    Pracujemy nad ulepszeniem, aby usunąć to wymaganie.

    Obejście:

    Upewnij się, że wszystkie tabele góry lodowej są przechowywane w katalogu głębiej niż katalog główny zasobnika lub kontenera.

  • Foldery tabel góry lodowej muszą zawierać tylko jeden zestaw plików metadanych

    Jeśli upuścisz i ponownie utworzysz tabelę Góry lodowej w snowflake, pliki metadanych nie są czyszczone. To zachowanie jest obsługiwane UNDROP przez funkcję w aplikacji Snowflake. Jednak ponieważ skrót wskazuje bezpośrednio folder i ten folder zawiera teraz wiele zestawów plików metadanych, nie możemy przekonwertować tabeli, dopóki nie usuniesz plików metadanych starej tabeli.

    Obecnie próba konwersji jest podejmowana w tym scenariuszu, co może spowodować wyświetlenie starych informacji spisu i schematu w zwirtualizowanej tabeli usługi Delta Lake.

    Pracujemy nad poprawką, w której konwersja kończy się niepowodzeniem, jeśli w folderze metadanych tabeli Iceberg znajduje się więcej niż jeden zestaw plików metadanych.

    Obejście:

    Aby upewnić się, że przekonwertowana tabela odzwierciedla poprawną wersję tabeli:

    • Upewnij się, że nie przechowujesz więcej niż jednej tabeli Góry lodowej w tym samym folderze.
    • Wyczyść dowolną zawartość folderu tabeli Góry lodowej po upuszczaniu go przed ponownym utworzeniem tabeli.
  • Zmiany metadanych nie zostały natychmiast odzwierciedlone

    Jeśli wprowadzisz zmiany metadanych w tabeli Góry lodowej, takie jak dodanie kolumny, usunięcie kolumny, zmiana nazwy kolumny lub zmiana typu kolumny, tabela może nie zostać przywrócona do momentu wprowadzenia zmiany danych, na przykład dodania wiersza danych.

    Pracujemy nad poprawką, która pobiera prawidłowy najnowszy plik metadanych zawierający najnowszą zmianę metadanych.

    Obejście:

    Po wprowadzeniu zmiany schematu w tabeli Góry lodowej dodaj wiersz danych lub wprowadź inne zmiany w danych. Po tej zmianie powinno być możliwe odświeżenie i wyświetlenie najnowszego widoku tabeli w usłudze Fabric.

  • Obszary robocze z obsługą schematu nie są jeszcze obsługiwane

    Jeśli utworzysz skrót z góry lodowej w jeziorze z obsługą schematu, konwersja nie wystąpi dla tego skrótu.

    Pracujemy nad ulepszeniem w celu usunięcia tego ograniczenia.

    Obejście:

    Użyj usługi lakehouse z obsługą schematu z tą funkcją. To ustawienie można skonfigurować podczas tworzenia usługi Lakehouse.

  • Ograniczenie dostępności regionu

    Funkcja nie jest jeszcze dostępna w następujących regionach:

    • Katar Środkowy
    • Norwegia Zachodnia

    Obejście:

    Obszary robocze dołączone do pojemności sieci szkieletowej w innych regionach mogą używać tej funkcji. Zobacz pełną listę regionów, w których jest dostępna usługa Microsoft Fabric.

  • Łącza prywatne nie są obsługiwane

    Ta funkcja nie jest obecnie obsługiwana w przypadku dzierżaw ani obszarów roboczych z włączonymi linkami prywatnymi.

    Pracujemy nad ulepszeniem w celu usunięcia tego ograniczenia.

  • Ograniczenie rozmiaru tabeli

    Mamy tymczasowe ograniczenie dotyczące rozmiaru tabeli Góry lodowej obsługiwanej przez tę funkcję. Maksymalna obsługiwana liczba plików danych Parquet wynosi około 5000 plików danych lub około 1 miliardów wierszy, w zależności od tego, co zostanie napotkane jako pierwsze.

    Pracujemy nad ulepszeniem w celu usunięcia tego ograniczenia.

  • Skróty oneLake muszą być w tym samym regionie

    Mamy tymczasowe ograniczenie dotyczące korzystania z tej funkcji ze skrótami wskazującymi lokalizacje OneLake: lokalizacja docelowa skrótu musi znajdować się w tym samym regionie co sam skrót.

    Pracujemy nad ulepszeniem, aby usunąć to wymaganie.

    Obejście:

    Jeśli masz skrót OneLake do tabeli Góry Lodowej w innym jeziorze, upewnij się, że drugi jezioro jest skojarzone z pojemnością w tym samym regionie.

  • Dowiedz się więcej na temat zabezpieczeń sieci szkieletowej i usługi OneLake.
  • Dowiedz się więcej o skrótach OneLake.