Praca z tabelami zewnętrznymi

W Katalogu Unity zewnętrzna tabela przechowuje pliki danych w magazynie obiektów w chmurze w ramach Twojej dzierżawy chmurowej. Unity Catalog nadal zarządza metadanymi tabeli, zapewniając pełne zarządzanie danymi we wszystkich zapytaniach. Jednak nie zarządza cyklem życia, optymalizacją, lokalizacją magazynu ani układem danych.

Podczas definiowania tabeli zewnętrznej katalogu Unity należy określić lokalizację przechowywania. Ta lokalizacja jest lokalizacją zewnętrzną zarejestrowaną w katalogu Unity. Gdy usuniesz tabelę zewnętrzną, Unity Catalog usuwa metadane tabeli, ale nie usuwa leżących u podstaw plików danych.

Ta strona dotyczy zewnętrznych tabel Unity Catalog. Tabele zewnętrzne w starszym magazynie metadanych Hive mają różne zachowania. Zobacz Obiekty bazy danych w starszym magazynie metadanych Hive.

Kiedy należy używać tabel zewnętrznych

Usługa Databricks zaleca używanie tabel zewnętrznych w następujących przypadkach użycia:

W większości przypadków usługa Databricks zaleca korzystanie z tabel zarządzanych przez Unity Catalog, aby skorzystać z automatycznej optymalizacji tabel, szybszej wydajności zapytań i obniżenia kosztów. Aby zmigrować tabele zewnętrzne do tabel zarządzanych, zobacz Konwertowanie zewnętrznych lub obcych tabel Delta Lake na tabele zarządzane w Unity Catalog.

Ważne

W przypadku aktualizacji metadanych tabeli zewnętrznej przy użyciu klienta innego niż Databricks lub dostępu opartego na ścieżkach z poziomu Databricks, te metadane nie są automatycznie synchronizowane ze stanem w Unity Catalog. Usługa Databricks odradza wykonywanie takich aktualizacji metadanych, ale jeżeli je wykonasz, trzeba uruchomić MSCK REPAIR TABLE <table-name> SYNC METADATA, aby zaktualizować schemat w Unity Catalog. Zobacz REPAIR TABLE.

Formaty plików dla tabel zewnętrznych

Tabele zewnętrzne mogą używać następujących formatów plików:

  • DELTA
  • CSV
  • JSON
  • AVRO
  • PARKIET
  • ORK
  • TEKST

Tworzenie tabeli zewnętrznej

Tabele zewnętrzne można tworzyć przy użyciu poleceń SQL lub operacji zapisu ramki danych.

Przed rozpoczęciem

Przed utworzeniem tabeli zewnętrznej należy najpierw skonfigurować lokalizację zewnętrzną, która udziela dostępu do magazynu w chmurze.

Aby uzyskać więcej informacji na temat konfigurowania lokalizacji zewnętrznych, zobacz Łączenie z lokalizacją zewnętrzną Azure Data Lake Storage Gen2 (ADLS Gen2), .

Aby utworzyć tabelę zewnętrzną, musisz spełnić następujące wymagania dotyczące uprawnień:

  • Uprawnienie CREATE EXTERNAL TABLE w lokalizacji zewnętrznej, które umożliwia dostęp do LOCATION przez tabelę zewnętrzną.
  • Uprawnienie USE CATALOG do katalogu nadrzędnego tabeli.
  • Uprawnienie USE SCHEMA w schemacie nadrzędnym tabeli.
  • Uprawnienie CREATE TABLE w schemacie nadrzędnym tabeli.

Uwaga / Notatka

Jeśli lokalizacja zewnętrzna S3 jest skojarzona z wieloma magazynami metadanych, unikaj udzielania dostępu do zapisu do tabel korzystających z tej lokalizacji S3, ponieważ zapisy z różnych magazynów metadanych do tej samej tabeli zewnętrznej mogą powodować problemy ze spójnością. Jednak odczyt z tej samej lokalizacji zewnętrznej S3 w wielu magazynach metadanych jest bezpieczny.

Przykłady

Użyj jednego z poniższych przykładów w notesie lub edytorze zapytań SQL, aby utworzyć tabelę zewnętrzną.

W poniższych przykładach zastąp wartości symboli zastępczych:

  • <catalog>: nazwa wykazu, który będzie zawierać tabelę.
  • <schema>: nazwa schematu, który będzie zawierać tabelę.
  • <table-name>: nazwa tabeli.
  • <column-name> i <data-type>: Nazwa i typ danych dla każdej kolumny.
  • <bucket-path>: Ścieżka do kubełka w chmurze, gdzie zostanie utworzona tabela.
  • <table-directory>: katalog, w którym zostanie utworzona tabela. Użyj unikatowego katalogu dla każdej tabeli.
  • <source-table>: Tabela używana jako źródło danych podczas tworzenia tabeli na podstawie wyników zapytania.

SQL

Aby utworzyć tabelę zewnętrzną w usłudze ADLS Gen2 ze zdefiniowanym schematem, uruchom następujące polecenie:

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-name> <data-type>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';

Aby utworzyć tabelę zewnętrzną w usłudze ADLS Gen2 na podstawie wyników zapytania, uruchom następujące polecenie:

CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 'abfss://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;

Aby utworzyć tabelę zewnętrzną w usłudze S3 ze zdefiniowanym schematem, uruchom następujące polecenie:

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-name> <data-type>
)
LOCATION 's3://<bucket-path>/<table-directory>';

Aby utworzyć tabelę zewnętrzną w usłudze S3 na podstawie wyników zapytania, uruchom następujące polecenie:

CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 's3://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;

Python

Aby utworzyć tabelę zewnętrzną w usłudze ADLS Gen2 ze zdefiniowanym schematem, uruchom następujące polecenie:

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

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

spark.createDataFrame([], schema).write \
  .option("path", "abfss://<bucket-path>/<table-directory>") \
  .saveAsTable("<catalog>.<schema>.<table-name>")

Aby utworzyć tabelę zewnętrzną w usłudze ADLS Gen2 na podstawie ramki danych, uruchom następujące polecenie:

df.write \
  .option("path", "abfss://<bucket-path>/<table-directory>") \
  .saveAsTable("<catalog>.<schema>.<table-name>")

Aby utworzyć tabelę zewnętrzną w usłudze S3 ze zdefiniowanym schematem, uruchom następujące polecenie:

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

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

spark.createDataFrame([], schema).write \
  .option("path", "s3://<bucket-path>/<table-directory>") \
  .saveAsTable("<catalog>.<schema>.<table-name>")

Aby utworzyć tabelę zewnętrzną w usłudze S3 na podstawie ramki danych, uruchom następujące polecenie:

df.write \
  .option("path", "s3://<bucket-path>/<table-directory>") \
  .saveAsTable("<catalog>.<schema>.<table-name>")

Aby uzyskać więcej informacji na temat parametrów tworzenia tabeli, zobacz CREATE TABLE.

Następujące opcje składni SQL działają z operacjami ramki danych:

Usuń tabelę zewnętrzną

Aby usunąć tabelę, musisz być jej właścicielem lub mieć uprawnienia MANAGE na tabeli. Aby usunąć tabelę zewnętrzną, 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)

Katalog Unity nie usuwa danych w przechowywaniu danych w chmurze podczas usuwania tabeli zewnętrznej. Jeśli chcesz usunąć dane skojarzone z tabelą, musisz bezpośrednio usunąć pliki danych bazowych.

Przykładowy notebook: tworzenie tabel zewnętrznych

W poniższym przykładowym notesie można utworzyć wykaz, schemat i tabelę zewnętrzną oraz zarządzać uprawnieniami.

Tworzenie i zarządzanie tabelą zewnętrzną w notebooku Unity Catalog

Pobierz notes