Tabele zarządzane w usłudze Unity Catalog dla Delta Lake i Apache Iceberg

Tabele zarządzane w Unity Catalog są domyślnym i zalecanym typem tabel w Azure Databricks dla Delta Lake i Apache Iceberg. Unity Catalog zarządza wszystkimi operacjami odczytu i zapisu, magazynowaniem oraz optymalizacją. Zobacz Konwertuj zewnętrzne lub obce tabele Delta Lake na tabele zarządzane w Unity Catalog.

Pliki danych dla tabel zarządzanych są przechowywane w schemacie lub wykazie zawierającym je. Zobacz Określanie zarządzanej lokalizacji magazynu w katalogu Unity.

W porównaniu z tabelami zewnętrznymi i zagranicznymi , tabele zarządzane są tańsze w przechowywaniu i zapytaniach, automatycznie utrzymują i optymalizują oraz pozostają dostępne dla klientów zewnętrznych dzięki otwartym API.

Możesz pracować z tabelami zarządzanymi we wszystkich językach i produktach obsługiwanych w usłudze Azure Databricks. Musisz mieć pewne uprawnienia do tworzenia, aktualizowania, usuwania lub wykonywania zapytań względem tabel zarządzanych. Zobacz Zarządzanie uprawnieniami w Unity Catalog.

Note

Na tej stronie opisano tylko tabele zarządzane w Unity Catalog. W przypadku tabel zarządzanych w starszym magazynie metadanych Hive, zobacz Obiekty bazy danych w starszym magazynie metadanych Hive.

Zalety tabel zarządzanych w Unity Catalog

Tabele zarządzane w katalogu Unity Catalog optymalizują koszty przechowywania danych i szybkość wykonywania zapytań oraz zapewniają interoperacyjność z narzędziami innych firm obsługującymi Delta Lake i Apache Iceberg. Aby uprościć zarządzanie danymi i wydajność, te tabele zarządzane używają technologii opartych na sztucznej inteligencji, takich jak kompaktowanie rozmiaru plików i inteligentne zbieranie statystyk.

Tabele zarządzane zapewniają interoperacyjność, umożliwiając dostęp klientom Delta Lake i Apache Iceberg. Zobacz Uzyskiwanie dostępu do danych usługi Databricks przy użyciu systemów zewnętrznych.

Następujące funkcje są dostępne wyłącznie w tabelach zarządzanych usługi Unity Catalog i nie są dostępne dla tabel zewnętrznych ani tabel obcych:

Feature Benefits Konfiguracja
Zatwierdzenia wykazu Umożliwia transakcje wielooperacyjne obejmujące wiele tabel, szybsze planowanie zapytań, możliwość wymuszania zmian schematu i ograniczeń oraz bezpieczny zapis danych z zewnętrznych silników. Domyślnie wyłączone. Aby włączyć, ustaw właściwość tabeli delta.feature.catalogManaged. Zobacz Włączanie zatwierdzeń katalogu.
Optymalizacja predykcyjna Automatycznie optymalizuje układ danych i obliczenia za pomocą AI, bez konieczności ręcznych operacji konserwacyjnych. Usługa Databricks zaleca włączenie optymalizacji predykcyjnej dla wszystkich zarządzanych tabel w celu zmniejszenia kosztów magazynowania i obliczeń. Domyślnie włączone dla kont utworzonych od 11 listopada 2024 roku lub później. Azure Databricks stopniowo umożliwia to dla istniejących kont. Aby skonfigurować, zobacz Włączanie optymalizacji predykcyjnej.
Transakcje wielooperacyjne Uruchamiaj wiele instrukcji SQL w obrębie jednej lub wielu tabel w ramach jednej transakcji zatwierdzanej atomowo, z zachowaniem właściwości ACID. Wszystkie zmiany kończą się powodzeniem lub cofają się razem. Zastosowanie do procedur przechowywanych i skryptów SQL. Domyślnie wyłączone. Aby wybrać tryb transakcji, zobacz Tryby Transakcji.
Zapisywanie do zarządzanych tabel Apache Iceberg jest dostępne w prywatnej wersji zapoznawczej.
Automatyczne klastrowanie cieczy W tabelach z optymalizacją predykcyjną automatycznie wybiera i aktualizuje klucze klastrujące wraz ze zmianą wzorców zapytań, aby poprawić wydajność i obniżyć koszty. Domyślnie wyłączone. Aby skonfigurować, zobacz Włącz klastrowanie liquid.
Buforowanie metadanych Buforowanie metadanych transakcyjnych w pamięci poprawia wydajność zapytań poprzez minimalizację żądań do dziennika transakcyjnego przechowywanego w chmurze. Włączone domyślnie. Nie można skonfigurować.
Indeksy wyszukiwania pełnotekstowego Przyspiesza wyszukiwanie podciągów i wyrazów kluczowych w kolumnach tekstowych za pomocą funkcji search i isearch. Azure Databricks pomija pliki, które nie mogą zawierać pasujących wierszy, zmniejszając ilość skanowanych danych. Domyślnie wyłączone. Utwórz za pomocą polecenia CREATE SEARCH INDEX.
W Beta. Wymaga środowiska Databricks Runtime w wersji 18.2 lub nowszej.
Automatyczne usuwanie plików po poleceniu DROP TABLE Gdy usuwasz zarządzaną tabelę, Azure Databricks usuwa pliki danych z chmury po upływie okresu odzyskiwania (domyślnie 7 dni), co zmniejsza koszty przechowywania. W przypadku tabel zewnętrznych należy ręcznie usunąć pliki z zasobnika pamięci. Włączone domyślnie. Okres odzyskiwania można skonfigurować na poziomie wykazu lub schematu. Zobacz Usuwanie zarządzanej tabeli.

Uzyskiwanie dostępu do danych usługi Databricks przy użyciu systemów zewnętrznych

Tabele zarządzane zapewniają interoperacyjność, umożliwiając dostęp klientom Delta Lake i Apache Iceberg.

Dzięki otwartym interfejsom API i udostępnianiu poświadczeń Unity Catalog umożliwia zewnętrznym silnikom, takim jak Trino, DuckDB, Apache Spark i Daft, oraz silnikom zintegrowanym z katalogiem Iceberg REST, takim jak Dremio, uzyskiwanie dostępu do zarządzanych tabel. W przypadku klientów zewnętrznych, którzy nie obsługują otwartych interfejsów API, można użyć trybu zgodności do odczytywania tabel zarządzanych przy użyciu dowolnego klienta usługi Delta Lake lub Apache Iceberg. Usługa OpenSharing, protokół open source, umożliwia bezpieczne, zarządzane udostępnianie danych partnerom zewnętrznym i platformom.

Zapoznaj się z listą obsługiwanych integracji zewnętrznych silników lub sprawdź dokumentację swojego silnika, jeśli nie znajduje się na tej liście.

Następujące otwarte interfejsy API umożliwiają systemom zewnętrznym dostęp do tabel zarządzanych w Unity Catalog:

  • Unity REST API zapewnia klientom Delta Lake dostęp do odczytu, zapisu i tworzenia w zarządzanych tabelach Delta Lake.
  • Iceberg REST Catalog (IRC) umożliwia odczyt, zapis i tworzenie dostępu dla klientów Apache Iceberg do zarządzanych tabel Apache Iceberg oraz dostępu tylko do odczytu tabel Delta Lake z włączonym odczytem Apache Iceberg.

Oba interfejsy API obsługują wydawanie poświadczeń, które zapewnia tymczasowe, ograniczone poświadczenia dziedziczące uprawnienia podmiotu zabezpieczeń usługi Azure Databricks, który złożył żądanie, zachowując kontrolę i zabezpieczenia.

OpenSharing to protokół open source, który umożliwia bezpieczny i zarządzany dostęp do danych partnerom zewnętrznym i platformom. Możesz użyć funkcji OpenSharing, aby udzielić partnerom tymczasowego dostępu tylko do odczytu.

Wszystkie operacje odczytu i zapisu w zarządzanych tabelach muszą używać nazw tabel oraz, gdzie występują, nazw wykazów i schematów. Na przykład catalog_name.schema_name.table_name. Dostęp oparty na ścieżkach do tabel zarządzanych przez Unity Catalog nie jest obsługiwany (z wyjątkiem trybu zgodności), ponieważ omija mechanizmy kontroli dostępu Unity Catalog i uniemożliwia prawidłowe działanie funkcji zarządzanych tabel.

Tworzenie tabeli zarządzanej

Aby utworzyć zarządzaną tabelę, musisz mieć następujące elementy:

  • USE SCHEMA w schemacie nadrzędnym tabeli.
  • USE CATALOG w katalogu nadrzędnym tabeli.
  • CREATE TABLE w schemacie nadrzędnym tabeli.

Użyj poniższej składni, aby utworzyć pustą tabelę zarządzaną. Zastąp wartości zastępcze:

  • <catalog-name>: nazwa wykazu, który będzie zawierać tabelę.
  • <schema-name>: nazwa schematu zawierająca tabelę.
  • <table-name>: nazwa tabeli.
  • <column-specification>: Nazwa i typ danych każdej kolumny.

SQL

-- Create a managed Delta table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
);

-- Create a managed Iceberg table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
)
USING iceberg;

Python

Utwórz zarządzaną tabelę Delta Lake przy użyciu polecenia saveAsTable():

from pyspark.sql.types import StructType, StructField, StringType

schema = StructType([StructField("<column-name>", StringType())])

spark.createDataFrame([], schema).write \
  .saveAsTable("<catalog-name>.<schema-name>.<table-name>")

Alternatywnie, użyj interfejsu API DeltaTableBuilder dla opcji specyficznych dla Delta, takich jak generowane kolumny i właściwości tabel:

from delta.tables import DeltaTable

DeltaTable.create(spark) \
  .tableName("<catalog-name>.<schema-name>.<table-name>") \
  .addColumn("<column-name>", "<data-type>") \
  .property("<key>", "<value>") \
  .execute()

Utwórz zarządzaną tabelę Apache Iceberg:

from pyspark.sql.types import StructType, StructField, StringType

schema = StructType([StructField("<column-name>", StringType())])

spark.createDataFrame([], schema).write \
  .format("iceberg") \
  .saveAsTable("<catalog-name>.<schema-name>.<table-name>")

Aby zachować wydajność operacji odczytu i zapisu, Azure Databricks okresowo uruchamia operacje w celu zoptymalizowania zarządzanych metadanych tabeli Apache Iceberg. To zadanie jest wykonywane przy użyciu obliczeń bezserwerowych, które mają MODIFY uprawnienia do tabeli Apache Iceberg. Ta operacja zapisuje tylko metadane tabeli, a obliczenia zachowują tylko uprawnienia do tabeli przez czas trwania zadania.

Note

Aby utworzyć tabelę Apache Iceberg, jawnie określ wartość USING iceberg. W przeciwnym razie usługa Azure Databricks domyślnie tworzy tabelę Delta Lake.

Tabele zarządzane można tworzyć na podstawie wyników zapytania lub operacji zapisu ramki danych. W poniższych artykułach przedstawiono niektóre z wielu wzorców, których można użyć do utworzenia tabeli zarządzanej w usłudze Azure Databricks:

Aby utworzyć kopię istniejącej tabeli zarządzanej, użyj polecenia clone. Zarządzane tabele usługi Delta Lake obsługują głębokie i płytkie klonowanie. Zarządzane tabele Apache Iceberg obsługują tylko głębokie klonowanie. Zobacz Klonowanie tabeli w usłudze Azure Databricks i Klonowanie zarządzanej tabeli Iceberg.

Usuwanie zarządzanej tabeli

Aby usunąć zarządzaną tabelę, musisz mieć następujące elementy:

  • MANAGE w tabeli lub musisz być właścicielem tabeli.
  • USE SCHEMA w schemacie nadrzędnym tabeli.
  • USE CATALOG w katalogu nadrzędnym tabeli.

Aby usunąć zarządzaną tabelę, uruchom następujące polecenie:

SQL

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Python

spark.sql("DROP TABLE IF EXISTS catalog_name.schema_name.table_name")

Alternatywnie w środowisku Databricks Runtime 18.2 lub nowszym użyj polecenia spark.catalog.dropTable():

spark.catalog.dropTable("catalog_name.schema_name.table_name", ifExists=True)

Unity Catalog obsługuje UNDROP TABLE polecenie do odzyskiwania przypadkowo usuniętych tabel zarządzanych. Domyślnie tabele można odzyskać przez 7 dni po usunięciu. Po zakończeniu okresu przywracania Azure Databricks usuwa bazowe pliki danych z Twojej dzierżawy w chmurze w ciągu 48 godzin.

Konfigurowanie okresu odzyskiwania

Important

Konfigurowalny okres odzyskiwania jest w publicznej wersji zapoznawczej.

Możesz skonfigurować czas odzyskiwania usuniętych tabel zarządzanych na poziomie wykazu lub schematu. Jeśli okresy przechowywania są ustawione na obu poziomach, ustawienie na poziomie schematu ma pierwszeństwo dla tabel w tym schemacie.

Aby skonfigurować okres przywracania, musisz mieć uprawnienie MANAGE lub być właścicielem katalogu lub schematu. To ustawienie dotyczy tylko tabel porzuconych po jego skonfigurowaniu. Nie ma to wpływu na tabele, które zostały już usunięte.

Okres rekonwalescencji może wynosić 0 godzin, co uniemożliwia rekonwalescencję, lub od 7 do 30 dni. Dłuższy okres chroni przed przypadkowymi utratą krytycznych danych, podczas gdy krótszy czas szybciej usuwa upuszczone dane, aby zaoszczędzić koszty przechowywania w potokach ETL, które często tworzą i usuwają tabele. Po ustawieniu na 0 nie można odzyskać porzuconych tabel za pomocą UNDROP. Azure Databricks usuwa pliki danych z pamięci masowej w chmurze w ciągu 48 godzin od usunięcia.

Aby ustawić okres odzyskiwania, użyj klauzuli ALTER CATALOG lub ALTER SCHEMA z klauzulą RETAIN DROPPED TO :

SQL

-- Set a 30-day recovery period on a catalog
ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS;

-- Set a 7-day recovery period on a schema (overrides the catalog setting)
ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS;

Python

spark.sql("ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS")
spark.sql("ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS")

Okres odzyskiwania można również ustawić podczas tworzenia katalogu lub schematu za pomocą klauzuli RETAIN DROPPED FOR :

SQL

CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS;
CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS;

Python

spark.sql("CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS")
spark.sql("CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS")

Aby sprawdzić aktualny okres odzyskiwania, uruchom polecenie DESCRIBE EXTENDED. Dane wyjściowe zawierają wiersz Recovery Period Hours:

SQL

DESCRIBE CATALOG EXTENDED my_catalog;
DESCRIBE SCHEMA EXTENDED my_catalog.my_schema;

Python

spark.sql("DESCRIBE CATALOG EXTENDED my_catalog").show()
spark.sql("DESCRIBE SCHEMA EXTENDED my_catalog.my_schema").show()