Konwertuj zewnętrzne lub obce tabele Delta Lake na tabele zarządzane w Unity Catalog

Important

Konwertowanie tabeli zewnętrznej na zarządzaną tabelę jest ogólnie dostępne.

Konwersja tabeli obcej na tabelę zarządzaną jest dostępna w ramach Public Preview. Obsługiwane są tylko obce tabele sfederowane przy użyciu magazynu metadanych Hive i federacji Glue.

Aby przekonwertować zewnętrzną lub obcą tabelę Delta Lake na tabelę zarządzaną w Unity Catalog w usłudze Azure Databricks, użyj polecenia ALTER TABLE ... SET MANAGED lub, w przypadku tabel zewnętrznych, Eksploratora katalogu. Konwersja zachowuje konfiguracje tabel, w tym nazwy, ustawień, uprawnień i widoków oraz zachowuje historię tabel.

W przypadku konwersji tabel zewnętrznych, SET MANAGED również:

  • Minimalizuje przestoje użytkowników czytnika i zapisującego.
  • Obsługuje współbieżne zapisy podczas konwersji.
  • Umożliwia wycofanie przekonwertowanej tabeli zarządzanej na tabelę zewnętrzną.
  • Przekierowuje operacje odczytu i zapisu oparte na ścieżkach, aby umożliwić działanie starszego kodu po konwersji.

Chociaż do konwertowania tabeli zewnętrznej można również użyć CREATE TABLE AS SELECT (CTAS), Databricks zaleca SET MANAGED ze względu na te korzyści.

W przypadku konwersji tabel obcych usługa Databricks ustawia optymalizację predykcyjną dla przekonwertowanej tabeli na INHERIT , a nie automatycznie ją włącza. Zobacz Tabele obce przy użyciu języka SQL.

Aby przekonwertować tabele obce na tabele zewnętrzne, zobacz Konwertowanie tabeli obcej na zewnętrzną tabelę Unity Catalog.

Wymagania wstępne

Wymagania wstępne różnią się w zależności od tego, czy konwertujesz tabelę zewnętrzną, czy tabelę obcą.

Tabele zewnętrzne

Konwertowanie tabel zewnętrznych na tabele zarządzane ma następujące wymagania wstępne:

  • Format: Tabela musi używać formatu Delta Lake.
  • Databricks Runtime: aby używać SET MANAGED, UNSET MANAGED lub TRUNCATE UNIFORM HISTORY, musisz używać Databricks Runtime 17.3 LTS lub nowszego albo środowiska bezserwerowego.
  • Odczyt i zapis: Moduły odczytu i zapisu Azure Databricks dla tabel źródłowych muszą korzystać z Databricks Runtime 15.4 LTS lub nowszej wersji. Jeśli czytelnicy lub programy zapisujące używają wersji 14.3 LTS lub niższej, zobacz Starsze programy odczytujące i zapisujące.
  • Klienci zewnętrzni: klienci zewnętrzni (spoza Databricks) muszą obsługiwać odczyt z tabel zarządzanych w Unity Catalog. Zobacz Tabele programu Access z klientami Delta.
    • Użyj pulpitu nawigacyjnego Access Insights, aby sprawdzić, czy czytelnicy i autorzy uzyskujący dostęp do Twoich tabel korzystają z Databricks Runtime, czy pochodzą z zewnętrznych źródeł spoza Databricks.
  • Zgodność funkcji: jeśli tabela zawiera minReaderVersion=2, minWriterVersion=7 i tableFeatures={..., columnMapping}, polecenie SET MANAGED kończy się błędem DELTA_TRUNCATED_TRANSACTION_LOG. Sprawdź, czy tabela ma te właściwości przy użyciu polecenia DESCRIBE DETAIL. Zobacz kompatybilność funkcji i protokoły Delta Lake.

Po konwersji operacje odczytu i zapisu oparte na ścieżkach są automatycznie przekierowywane do nowej zarządzanej lokalizacji z niewielkim obciążeniem wydajności. Usługa Databricks zaleca migrację całego dostępu opartego na ścieżkach do dostępu opartego na nazwach, aby uniknąć obciążenia związanego z wydajnością. Zobacz Przekierowanie oparte na ścieżkach.

Important

Aby uniknąć konfliktów, anuluj wszystkie istniejące OPTIMIZE zadania poleceń (klastrowanie cieczy, kompaktowanie, ZORDER) działające w tabeli zewnętrznej i nie należy planować żadnych zadań podczas konwertowania tabel zewnętrznych na tabele zarządzane.

Tabele zewnętrzne

Important

Konwersja tabeli obcej na tabelę zarządzaną jest dostępna w ramach Public Preview.

Konwertowanie tabel obcych na tabele zarządzane ma następujące wymagania wstępne:

  • Format danych: tabela obca musi używać formatu Delta Lake. Aby wykonać jednorazową konwersję dla Parquet, zobacz Konwertowanie na Delta Lake.
  • Środowisko uruchomieniowe: Środowisko uruchomieniowe usługi Databricks Runtime w wersji 17.3 lub nowszej.
  • Typ tabeli: Typ tabeli w repozytorium metadanych Hive (HMS) musi być zewnętrzną tabelą HMS. Polecenie kończy się niepowodzeniem, jeśli tabela jest zarządzaną tabelą HMS.
  • Uprawnienia: OWNER lub MANAGE uprawnienia do tabeli oraz CREATE uprawnienie do obiektu EXTERNAL LOCATION.

Czas przestoju i kopiowania danych

Polecenie SET MANAGED minimalizuje lub eliminuje przestój w porównaniu z alternatywnymi metodami, takimi jak DEEP CLONE.

Tabele zewnętrzne

Proces konwersji tabel zewnętrznych korzysta z podejścia dwuetapowego:

  1. Początkowa kopia danych (bez przestoju): polecenie kopiuje dane tabeli i dziennik transakcji funkcji Delta z lokalizacji zewnętrznej do lokalizacji zarządzanej. Aktywne procesy odczytujące i zapisujące w tabeli zewnętrznej działają bez zakłóceń.
  2. Przełącz się do lokalizacji zarządzanej (krótki przestój): zatwierdzenia dokonane w lokalizacji zewnętrznej w pierwszym kroku są przenoszone do lokalizacji zarządzanej, a metadane tabeli są aktualizowane w celu zarejestrowania nowej lokalizacji zarządzanej. W tym kroku wszystkie zapisy w lokalizacji zewnętrznej są tymczasowo blokowane, co powoduje przestój zapisu. Czytelnicy środowiska Databricks Runtime 16.4 LTS lub nowszego nie mają przestoju, ale czytelnicy środowiska Databricks Runtime 15.4 LTS i poniżej mogą wystąpić przestoje.

W poniższej tabeli przedstawiono szacowany przestój na podstawie rozmiaru tabeli źródłowej i szacowanej szybkości przepływności wynoszącej 0,5–2 GB/rdzenia procesora CPU/minuty:

Rozmiar tabeli Zalecany rozmiar klastra Szacowany czas kopiowania danych Szacowany przestój modułów odczytu i zapisu
100 GB lub mniej 32-rdzeniowy/ X-Large SQL Warehouse ~6 min lub mniej ~1–2 min lub mniej
1 TB (terabajt) 64-rdzeniowy / 2X-Large magazyn SQL ~30 min ~1–2 min
10 terabajtów (TB) 256-rdzeniowy magazyn SQL klasy 4X-Large ~1,5 godz. ~1–5 min

Uwaga / Notatka

Przestój może się różnić w zależności od czynników, takich jak rozmiar pliku, liczba plików i liczba zatwierdzeń.

Tabele obce

Przestój podczas konwersji tabeli zewnętrznej zależy od tego, czy używasz MOVE, czy COPY:

  • W przypadku MOVE może wystąpić przerwa w działaniu, tak jak opisano w przypadku tabel zewnętrznych. Zobacz Tabele zewnętrzne.
  • W przypadku COPY odpowiadasz za zarządzanie czasem przestoju, ponieważ proces konwersji kopiuje tabelę źródłową do zarządzanej lokalizacji magazynowania, tworząc dwie oddzielne kopie danych. Odpowiadasz za wyłączenie odczytów i zapisów do tabeli źródłowej w wykazie zewnętrznym oraz migrowanie obciążeń do korzystania z nowej tabeli zarządzanej.

Konwertowanie na tabelę zarządzaną

Przekonwertuj tabelę zewnętrzną przy użyciu Eksploratora wykazu lub sql albo przekonwertuj tabelę obcą przy użyciu języka SQL.

Tabele zewnętrzne korzystające z Eksploratora wykazu (beta)

Important

Konwertowanie tabel zewnętrznych na zarządzane przy użyciu Eksploratora katalogów jest w wersji beta.

Korzystając z Catalog Explorer, można jednocześnie przekonwertować jedną lub więcej tabel zewnętrznych w schemacie.

  1. Przejdź do tabeli lub schematu, który chcesz przekonwertować w Eksploratorze wykazu.

  2. W obszarze Informacje o tej tabeli (strona szczegółów tabeli) lub Informacje o tym schemacie (strona szczegółów schematu) kliknij pozycję Eksploruj optymalizacje.

  3. W oknie dialogowym Dlaczego przeprowadzić migrację do tabel zarządzanych w Unity Catalog? kliknij przycisk Kontynuuj.

    Okno dialogowe

  4. Wybierz tabele zewnętrzne, które chcesz przekonwertować. Jeśli okno dialogowe zostanie otwarte na stronie szczegółów tabeli, Eksplorator wykazu wstępnie wybierze tabelę. Użyj paska wyszukiwania, aby znaleźć dodatkowe tabele. Tabele zarządzane nie są wybieralne.

    Strona wyboru tabeli przedstawiająca wstępnie wybraną tabelę zewnętrzną i niedostępną zarządzaną tabelę

  5. Kliknij pozycję Utwórz notes konwersji.

  6. Opcjonalnie wprowadź nazwę notesu. Domyślnie spowoduje to zapisanie notesu w folderze głównym. Kliknij przycisk Przeglądaj , aby zapisać go w innej lokalizacji.

    Okno dialogowe Tworzenie notesu konwersji z polem nazwy i opcją Przeglądaj

  7. W notesie przejrzyj najlepsze rozwiązania i sprawdź, czy spełniasz wszystkie wymagania wstępne.

  8. Uruchom komórkę SET ZAPYTANIA ZARZĄDZANE.

Po uruchomieniu komórki typ tabeli jest wyświetlany jako MANAGED zamiast EXTERNAL w Eksploratorze katalogu. Odśwież stronę, jeśli stan nie zostanie natychmiast zaktualizowany.

Tabele zewnętrzne korzystające z języka SQL

W zależności od tego, czy tabela zewnętrzna ma włączone odczyty Apache Iceberg (UniForm), uruchom jedno z następujących poleceń. Aby sprawdzić, czy w tabeli są włączone odczyty Iceberg, zobacz Sprawdzanie, czy odczyty Iceberg są włączone.

  • W przypadku zewnętrznych tabel Unity Catalog bez włączonego odczytu w formacie Iceberg uruchom następujące polecenie:

    ALTER TABLE catalog.schema.my_external_table SET MANAGED;
    

    Po konwersji można włączyć odczyty Iceberg w zarządzanej tabeli bez problemów ze zgodnością.

  • Dla tabel zewnętrznych Unity Catalog z już włączoną obsługą odczytu Iceberg uruchom następujące polecenie:

    ALTER TABLE catalog.schema.my_external_table SET MANAGED TRUNCATE UNIFORM HISTORY;
    

    Uwzględnij TRUNCATE UNIFORM HISTORY, aby zachować optymalną wydajność i zgodność tabeli. TRUNCATE UNIFORM HISTORY przycina tylko historię UniForm Iceberg i nie usuwa historii Delta. To polecenie powoduje krótki przestój w odczycie i zapisie dla Iceberg po przycięciu.

Po konwersji tabeli istniejące strumienie odczytu i zapisu kończą się niepowodzeniem. Uruchom ponownie strumienie z tymi samymi konfiguracjami, aby automatycznie korzystać z przekierowania opartego na ścieżce. Sprawdź, czy czytelnicy i autorzy współpracują z zarządzaną tabelą. Zobacz Zachowanie przesyłania strumieniowego.

Optymalizacja predykcyjna jest automatycznie włączana po konwersji, chyba że została ona ręcznie wyłączona. Zobacz Sprawdzanie, czy optymalizacja predykcyjna jest włączona.

Azure Databricks przechowuje dane w lokalizacji zewnętrznej Unity Catalog przez 14 dni, aby umożliwić wycofanie zmian. Zobacz Wycofywanie konwersji zarządzanej tabeli. Po 14 dniach po włączeniu optymalizacji predykcyjnej Azure Databricks automatycznie usuwa te dane w celu odzyskania magazynu i oszczędzania kosztów. Jeśli wyłączysz optymalizację predykcyjną, uruchom polecenie VACUUM (wymaga środowiska Databricks Runtime 17.3 LTS lub nowszego lub bezserwerowego) na nowo przekonwertowanej tabeli zarządzanej po 14 dniach, aby odzyskać magazyn samodzielnie.

VACUUM my_converted_table

Uwaga / Notatka

Nawet przy włączonej optymalizacji predykcyjnej dane w lokalizacji zewnętrznej Unity Catalog mogą nie zostać usunięte po 14 dniach. Na przykład może się to zdarzyć, gdy zarządzana tabela jest rzadko używana lub mała. Jeśli poprzednie dane pozostają, uruchom VACUUM ręcznie, aby je usunąć.

Usługa Azure Databricks usuwa tylko dane w lokalizacji zewnętrznej. Dziennik transakcji Delta i odwołanie do tabeli w wykazie Unity Catalog są przechowywane.

Tabele obce używające języka SQL

Important

Konwersja tabeli obcej na tabelę zarządzaną jest dostępna w ramach Public Preview.

Aby przekonwertować tabelę obcą Unity Catalog na zarządzaną przez Unity Catalog, uruchom następujące polecenie:

ALTER TABLE source_table SET MANAGED {MOVE | COPY}
  • source_table

    Istniejąca tabela zewnętrzna sfederowana w Unity Catalog.

  • MOVE

    Konwertuje tabelę na zarządzaną i wyłącza dostęp do tabeli źródłowej w wykazie zewnętrznym.

    • Dostęp za pośrednictwem katalogu zewnętrznego lub dostęp oparty na ścieżkach kończy się niepowodzeniem po przekonwertowaniu tabeli. Wszyscy czytniki i pisarze tabeli muszą używać przestrzeni nazw Unity Catalog w celu uzyskania dostępu. Przykład:

      SELECT * FROM catalog_name.schema_name.table_name;
      
    • Dostęp oparty na ścieżkach nie jest obsługiwany i kończy się niepowodzeniem po przekonwertowaniu tabeli. Przykład:

      SELECT * FROM delta.`protocol://path/to/table`;
      
    • Wymagania dotyczące wersji czytnika/składnika zapisywania i zgodności klienta są takie same jak w temacie Wymagania wstępne i starsze czytniki i składniki zapisywania.

    • Optymalizacja predykcyjna jest ustawiona na INHERIT , chyba że została ręcznie skonfigurowana. Aby sprawdzić, czy optymalizacja predykcyjna jest włączona, zobacz Weryfikowanie, czy optymalizacja predykcyjna jest włączona.

  • COPY

    Konwertuje tabelę na zarządzaną bez modyfikowania lub wyłączania dostępu do tabeli źródłowej w wykazie zewnętrznym.

    • Podczas konwersji na zarządzaną proces konwersji kopiuje dane z tabeli źródłowej do zarządzanej lokalizacji magazynu zdefiniowanej dla tabeli obcej, tworząc dwie oddzielne kopie: nową tabelę zarządzaną i tabelę źródłową w wykazie zewnętrznym.
    • W przeciwieństwie do MOVE, gdzie operacje odczytu i zapisu kończą się niepowodzeniem, przy użyciu COPY jesteś odpowiedzialny za prawidłowe wyłączenie operacji odczytu i zapisu w tabeli źródłowej w katalogu zewnętrznym oraz upewnienie się, że obciążenia zostały przeniesione do nowego katalogu.

Po konwersji tabeli należy ponownie uruchomić wszystkie zadania przesyłania strumieniowego (odczyt lub zapis) przy użyciu tabeli obcej i sprawdzić, czy czytelnicy i autorzy współpracują z zarządzaną tabelą.

Przed konwersją, jeśli usuniesz tabelę źródłową w katalogu zewnętrznym, Unity Catalog usunie również tabelę zewnętrzną. Po przekonwertowaniu tabeli na tabelę zarządzaną usunięcie tabeli źródłowej w katalogu zewnętrznym nie ma wpływu na tabelę zarządzaną w Unity Catalog.

Jeśli polecenie zostanie przerwane podczas kopiowania danych, uruchom je ponownie. Polecenie jest wznawiane od miejsca, w którym zostało przerwane.

Warning

Usługa Databricks zaleca unikanie jednoczesnego uruchamiania wielu SET MANAGED poleceń w tej samej tabeli, co może prowadzić do niespójnego stanu tabeli.

Weryfikowanie konwersji

Aby sprawdzić, czy tabela została pomyślnie przekonwertowana na zarządzaną tabelę, sprawdź, czy tabela Type ma wartość MANAGED. Możesz wykonać jedną z następujących czynności:

  • Otwórz nową kartę i przejdź do Eksploratora wykazu. Na karcie Szczegóły w obszarze Informacje o tej tabeli zostanie wyświetlona tabela Typ jako Zarządzana.

  • Sprawdź tabelę Type , uruchamiając następujące polecenie SQL:

    DESCRIBE EXTENDED catalog_name.schema_name.table_name
    

    Aby sprawdzić wiele tabel jednocześnie lub za pomocą skryptu sprawdzania, wykonaj zapytanie information_schema.tables zamiast tego:

    SELECT table_type FROM system.information_schema.tables
    WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';
    

Starsi czytelnicy i autorzy

Databricks zaleca uaktualnienie wszystkich czytników i modułów zapisujących do wersji Databricks Runtime 15.4 LTS lub nowszej, aby korzystać z pełnych możliwości SET MANAGED, w tym zachowywania historii tabeli.

Nadal możesz użyć SET MANAGED , jeśli masz czytelników lub pisarzy w środowisku Databricks Runtime 15.3 lub nowszym. Jednak po przekonwertowaniu na zarządzaną tabelę można przejść do historycznych zatwierdzeń tylko według wersji, a nie według sygnatury czasowej.

Jeśli w ciągu 14 dni przywrócisz tabelę zewnętrzną, podróż w czasie do historycznych commitów utworzonych przed konwersją zostanie ponownie włączona. Podróż w czasie przy użyciu sygnatur czasowych nie jest obsługiwana w przypadku zatwierdzeń dokonanych w przekonwertowanej tabeli zarządzanej między konwersją a wycofaniem. Zobacz Wycofywanie konwersji zarządzanej tabeli.

Zapisywanie do tabeli po konwersji przy użyciu środowiska Databricks Runtime 15.3 lub starszego wymaga usunięcia funkcji inCommitTimestamp:

ALTER TABLE <table_name> DROP FEATURE inCommitTimestamp;

Przekierowanie oparte na ścieżkach

W środowisku Databricks Runtime 18.1 lub nowszym, po przekonwertowaniu zewnętrznej tabeli na tabelę zarządzaną w Unity Catalog, odczyty i zapisy oparte na ścieżkach do poprzedniej lokalizacji zewnętrznej są automatycznie przekierowywane do nowej zarządzanej lokalizacji. Odczyt oparty na ścieżkach to kod, taki jak SELECT * FROM delta.`/path/to/my_table`. Przekierowanie oparte na ścieżkach skraca czas i nakład pracy wymagane do migracji do zarządzanych tabel, umożliwiając starszemu kodowi, który korzysta ze ścieżek pamięci masowej, dalsze działanie bez refaktoryzacji.

Konwersje tabel obcych nie przekierowują dostępu opartego na ścieżkach.

W przypadku scenariuszy użycia o niskich opóźnieniach Azure Databricks zaleca dokonanie migracji dostępu opartego na ścieżkach do dostępu opartego na nazwach. Przekierowanie oparte na ścieżkach dodaje kilkaset milisekund obciążenia dla każdego odczytu lub zapisu opartego na ścieżce i wymaga, aby stare dzienniki Delta pozostały aktywne w zewnętrznej lokalizacji katalogu Unity Catalog. Operacje odczytu i zapisu oparte na nazwach nie mają dodatkowych obciążeń związanych z wydajnością. Zobacz Migracja kodu opartego na ścieżkach na kod oparty na nazwach.

Migrowanie kodu opartego na ścieżkach do opartego na nazwach

Jeśli zdecydujesz się nie używać przekierowania opartego na ścieżkach, możesz przeprowadzić migrację starszego kodu. Aby przeprowadzić migrację, zastąp odwołania oparte na ścieżkach odwołaniami opartymi na nazwach.

Poniższy przykład kodu zawiera odwołanie do tabeli opartej na ścieżkach do plików:

SELECT * FROM delta.`/path/to/customers_table`;

Zastąp odwołanie oparte na ścieżkach odwołaniem opartym na nazwie do tabeli zewnętrznej, jak w poniższym kodzie:

SELECT * FROM catalog_name.schema_name.customers_table;

Zachowanie przesyłania strumieniowego

Przesyłanie strumieniowe za pomocą przekierowania opartego na ścieżkach obsługuje odczyty i zapisy w następujących wersjach środowiska Databricks Runtime:

  • Operacje odczytu są obsługiwane w środowisku Databricks Runtime 18.1 lub nowszym.
  • Zapisy są obsługiwane w środowisku Databricks Runtime 18.2 lub nowszym.

Po konwersji należy ponownie uruchomić wszystkie zadania przesyłania strumieniowego, aby uniknąć odczytu lub zapisu w poprzedniej lokalizacji tabeli.

Operacje odczytu i zapisu oparte na ścieżkach w transmisji strumieniowej kończą się niepowodzeniem i zatrzymują na następnym punkcie kontrolnym z komunikatem migracji.

  • W przypadku operacji odczytu strumień zgłasza błąd: DELTA_STREAMING_INTERRUPTED_BY_MANAGED_TABLE_CONVERSION: The table at <path> has been converted to a Unity Catalog managed table. The stream has been stopped to ensure data consistency. Restart the stream and it will automatically resume from the last committed offset using the converted table.
  • W przypadku zapisów, pierwsza mikroseria po konwersji zgłasza błąd: Operation not allowed: STREAMING WRITE cannot be performed on a table with redirect feature. The no redirect rules are not satisfied [].

Aby usunąć błędy, uruchom ponownie strumienie z tymi samymi konfiguracjami. Dostęp oparty na ścieżkach automatycznie przekierowuje do zarządzanej tabeli.

Aby uzyskać informacje o ograniczeniach przekierowania opartego na ścieżkach, zobacz Ograniczenia.

Rozwiązywanie problemów z błędami konwersji

W tej sekcji opisano, jak rozwiązywać typowe problemy podczas konwertowania tabel zewnętrznych na tabele zarządzane w Unity Catalog przy użyciu SET MANAGED.

VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED

Jeśli konwersja nie powiedzie się, zawsze spróbuj ponownie użyć tej samej wersji środowiska Databricks Runtime. Metadane mogą być serializowane inaczej w różnych wersjach, co powoduje VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED niepowodzenie w przypadku ponawiania próby konwersji w innej wersji środowiska Databricks Runtime.

Zamykanie klastra podczas konwersji

Jeśli klaster zostanie zamknięty podczas konwersji, polecenie może zakończyć się niepowodzeniem z DELTA_ALTER_TABLE_SET_MANAGED_INTERNAL_ERROR. Spróbuj ponownie wykonać polecenie, aby wznowić konwersję.

Uszkodzona tabela zewnętrzna

Jeśli tabela zewnętrzna jest już uszkodzona (na przykład nieprawidłowy stan tabeli), konwersja może zakończyć się niepowodzeniem z błędami, takimi jak DELTA_TRUNCATED_TRANSACTION_LOG, DELTA_TXN_LOG_FAILED_INTEGRITYlub DELTA_STATE_RECOVER_ERRORS. Przed podjęciem próby konwersji sprawdź, czy możesz uruchomić podstawowe operacje w tabeli zewnętrznej, takie jak DESCRIBE DETAIL.

Niepowodzenie walidacji pliku

Polecenie SET MANAGED weryfikuje, czy wszystkie pliki z najnowszej migawki tabeli zostały skopiowane do nowej lokalizacji tabeli zarządzanej. Jeśli brakuje jakichkolwiek plików, polecenie kończy się niepowodzeniem z powodu błędu DELTA_ALTER_TABLE_SET_MANAGED_FAILED.FILE_VALIDATION_FAILED .

Aby rozwiązać ten problem:

  1. Sprawdź dzienniki sterowników platformy Spark, aby określić, których plików nie można migrować.
  2. Sprawdź, czy te pliki istnieją w lokalizacji źródłowej tabeli zewnętrznej i są dostępne.
  3. Spróbuj ponownie wykonać ALTER TABLE ... SET MANAGED polecenie.

Jeśli problem będzie się powtarzać, skontaktuj się z pomocą techniczną usługi Databricks.

Wycofaj konwersję tabeli zarządzanej

Important

Polecenia wycofywania wymagają bezserwerowego środowiska obliczeniowego lub środowiska Databricks Runtime 17.3 LTS lub nowszego.

Tabela zewnętrzna

Po przekonwertowaniu tabeli zewnętrznej na tabelę zarządzaną można cofnąć te zmiany w ciągu 14 dni za pomocą polecenia UNSET MANAGED. Spowoduje to zaktualizowanie metadanych tabeli w celu wskazania oryginalnej lokalizacji zewnętrznej. Databricks zachowuje wszystkie zapisy dokonane w zarządzanej lokalizacji po konwersji.

Aby powrócić do poprzedniej wersji tabeli zewnętrznej, uruchom następujące polecenie:

ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED;

Pamiętaj o następujących informacjach:

  • Jeśli polecenie wycofywania zostanie przerwane lub zakończy się niepowodzeniem, uruchom je ponownie, aby ponowić próbę.
  • Zadania przesyłania strumieniowego należy ponownie uruchomić po wycofaniu, podobnie jak w przypadku konwersji.
  • Zatwierdzenia dokonane w zarządzanej lokalizacji między konwersją a wycofaniem umożliwiają przechodzenie w czasie według wersji, ale nie według znacznika czasu.
  • Siedem dni po cofnięciu zmian Azure Databricks automatycznie usuwa dane w zarządzanej lokalizacji.

Tabela zewnętrzna: MOVE

Warning

Przed usunięciem zarządzanej tabeli należy uruchomić polecenie UNSET MANAGED . Usunięcie tabeli bez wcześniejszego uruchomienia UNSET MANAGED może spowodować utratę lub niespójności danych.

Migrację tabeli można wycofać i odzyskać dostęp do tabeli źródłowej w wykazie zewnętrznym przy użyciu UNSET MANAGED polecenia . Wycofanie wymaga dwóch kroków: najpierw musisz wycofać tabelę do tabeli zewnętrznej, a następnie usunąć tabelę zewnętrzną, aby ponownie sfederować tabelę jako tabelę obcą.

  1. Aby powrócić do poprzedniej wersji tabeli zewnętrznej, uruchom następujące polecenie:
ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
  1. Aby ponownie sfederować tabelę do tabeli obcej, usuń tabelę zewnętrzną za pomocą następującego polecenia:
DROP TABLE catalog.schema.my_managed_table

Tabela obca jest dostępna po następnej synchronizacji wykazu.

Pamiętaj o następujących informacjach:

  • W przypadku commitów wprowadzonych w lokalizacji zewnętrznej między konwersją a wycofaniem można cofać się według wersji, ale nie według znacznika czasu.
  • Siedem dni po wycofaniu usługa Databricks usuwa dane z lokalizacji zarządzanej.

Tabela zewnętrzna: COPY

Aby wycofać migrację tabeli, nie musisz uruchamiać UNSET MANAGED polecenia, ponieważ tabela źródłowa w wykazie zewnętrznym nie została zmodyfikowana. Usuń tabelę zarządzaną, a Databricks po następnej synchronizacji katalogu ponownie sfederuje ją jako tabelę zewnętrzną.

Weryfikowanie cofania zmian

Weryfikuj wycofania w odmienny sposób w przypadku tabel zewnętrznych i obcych.

Tabele zewnętrzne

Aby sprawdzić, czy zarządzana tabela została pomyślnie przywrócona do postaci tabeli zewnętrznej, sprawdź, czy tabela Type jest EXTERNAL. Możesz wykonać jedną z następujących czynności:

  • Otwórz nową kartę i przejdź do Eksploratora wykazu. Na karcie Szczegóły w obszarze Informacje o tej tabelityp tabeli jest wyświetlany jako Zewnętrzny.

  • Sprawdź tabelę Type , uruchamiając następujące polecenie SQL:

    DESCRIBE EXTENDED catalog_name.schema_name.table_name
    

    Aby sprawdzić wiele tabel jednocześnie lub za pomocą skryptu sprawdzania, wykonaj zapytanie information_schema.tables zamiast tego:

    SELECT table_type FROM system.information_schema.tables
    WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';
    

Tabele zewnętrzne

Aby sprawdzić, czy zarządzana tabela została pomyślnie przywrócona jako tabela obca, sprawdź, czy tabela Type jest FOREIGN. Możesz wykonać jedną z następujących czynności:

  • Otwórz nową kartę i przejdź do Eksploratora wykazu. Na karcie Szczegóły w obszarze Informacje o tej tabelityp tabeli jest wyświetlany jako Obcy.

  • Sprawdź typ tabeli, uruchamiając następujące polecenie SQL:

    SELECT table_type FROM system.information_schema.tables
    WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';
    

    Kolumna table_type jest wyświetlana jako FOREIGN.

Uwaga / Notatka

Nie używaj DESCRIBE EXTENDED, aby weryfikować konwersje tabel obcych ani wycofywanie zmian. Federacja w tym poleceniu używa hive_metastore sposobu działania katalogu, więc wyświetla tabelę Type jako EXTERNAL, niezależnie od rzeczywistego stanu tabeli.

Tematy zaawansowane

Ta sekcja zawiera zaawansowane tematy dotyczące konwertowania tabel obcych i zewnętrznych na tabele zarządzane.

Konwertowanie na poziomie schematu lub wykazu

Dostępne są dwie następujące opcje automatyzowania konwertowania tabel na poziomie schematu lub wykazu:

  • Iteruj tabele w schematach, aby przekonwertować każdą tabelę indywidualnie.

  • Użyj projektu discoverx labs, aby jednocześnie przekonwertować całe schematy lub wykazy:

    df = (dx.from_tables("prod.*.*")
    .with_sql("ALTER TABLE {full_table_name} SET MANAGED;")
    .apply())
    

Zobacz Databricks Labs i discoverx.

Tworzenie tabel w wykazie obcym

W katalogu zewnętrznym można tworzyć tabele zewnętrzne lub zarządzane. Zachowanie zależy od konfiguracji schematu:

  • W przypadku schematów Glue lub eHMS albo schematów z lokalizacją zarządzaną ustawioną w Unity Catalog: jeśli uruchomisz CREATE TABLE foreign_catalog.schema.table, co spowoduje utworzenie tabeli zarządzanej lub zewnętrznej w Unity Catalog. Usługa Databricks nie przesyła tabeli do katalogu zewnętrznego ani jej z nim nie synchronizuje.
  • W przypadku schematów z wewnętrznych połączeń magazynu metadanych Hive: jeśli spróbujesz utworzyć tabelę w obcym schemacie, nadal zostanie utworzona tabela obca, a także tabela w hive_metastore.
  • W przypadku starszego metastore Hive obszaru roboczego: ponieważ obsługuje on federację odczytu i zapisu, utworzenie tabeli w katalogu zewnętrznym powoduje również utworzenie tabeli w wewnętrznym metastore Hive.

Tabele obce oparte na systemie plików DBFS

Podczas konwertowania tabeli opartej na systemie plików DBFS usługa Databricks przechowuje bieżące mapowanie ścieżki DBFS jako lokalizacji ścieżki w chmurze tabeli zewnętrznej.

Ograniczenia

Konwertowanie tabel zewnętrznych lub obcych na tabele zarządzane ma następujące ograniczenia:

  • Historia tabeli dla zatwierdzeń dokonanych po konwersji, ale przed wycofaniem umożliwia przechodzenie w czasie według wersji, ale nie według znacznika czasu.

  • OpenSharing nie jest w pełni zgodny z poleceniem SET MANAGED. Funkcja OpenSharing jest obsługiwana, ale udostępnianie usługi Databricks do usługi Databricks nie powoduje automatycznej aktualizacji lokalizacji zarządzanej tabeli adresatów. Odbiorca nadal odczytuje dane ze starej lokalizacji, dopóki nie udostępnisz ponownie tabeli. Aby ponownie udostępnić tabelę, uruchom następujące polecenia:

    ALTER SHARE <share_name> REMOVE TABLE <table_name>;
    ALTER SHARE <share_name> ADD TABLE <table_name> AS <table_share_name> WITH HISTORY;
    
  • Jeśli domyślna zarządzana lokalizacja metastore, katalogu lub schematu w Unity Catalog znajduje się w innym regionie chmury niż lokalizacja przechowywania tabeli źródłowej, dostawca chmury może naliczyć dodatkowe koszty transferu danych między regionami.

    Aby sprawdzić lokalizację schematu i katalogu, uruchom następujące polecenia:

    DESC SCHEMA EXTENDED <catalog_name>.<schema_name>;
    
    DESC CATALOG EXTENDED <catalog_name>;
    

    Aby sprawdzić lokalizację magazynu metadanych, uruchom jedną z następujących poleceń:

    DESC METASTORE; -- Option 1
    SELECT * FROM system.information_schema.metastores; -- Option 2
    

Ograniczenia przekierowań opartych na ścieżce:

  • Po konwersji należy ponownie uruchomić wszystkie zadania przesyłania strumieniowego. Zobacz Zachowanie przesyłania strumieniowego.
  • Przekierowanie oparte na ścieżce służy wyłącznie do zachowania zgodności wstecznej na potrzeby procesu migracji i nie umożliwia nowego dostępu opartego na ścieżce do tabel zarządzanych w Unity Catalog.

Ograniczenia tabel obcych: