Práce s externími tabulkami

V katalogu Unity externí tabulka ukládá datové soubory v cloudovém úložišti objektů v rámci vašeho cloudového tenanta. Katalog Unity nadále spravuje metadata tabulky a zajišťuje úplné řízení dat napříč všemi dotazy. Nespravuje ale životní cyklus, optimalizaci, umístění úložiště ani rozložení dat.

Když definujete externí tabulku katalogu Unity, musíte zadat umístění úložiště. Toto umístění je externí umístění zaregistrované v katalogu Unity. Když odstraníte externí tabulku, Katalog Unity odebere metadata tabulky, ale neodstraní podkladové datové soubory.

Tato stránka se zaměřuje na externí tabulky katalogu Unity. Externí tabulky ve starším metastoru Hive mají různá chování. Viz Databázové objekty ve starší verzi Hive metastore.

Kdy použít externí tabulky

Databricks doporučuje používat externí tabulky pro následující případy použití:

  • Potřebujete zaregistrovat tabulku zálohovanou existujícími daty, která nejsou kompatibilní se spravovanými tabulkami katalogu Unity, jako jsou JSON nebo Avro. Viz Formáty souborů pro externí tabulky.
  • Potřebujete přímý přístup k datům z jiných klientů než Databricks, kteří nepodporují jiné vzory externího přístupu. Oprávnění katalogu Unity se nevynucují, když uživatelé přistupují k datovým souborům z externích systémů. Viz Přístup k datům Databricks pomocí externích systémů.

Ve většině případů databricks doporučuje používat spravované tabulky Unity Catalog k využití automatické optimalizace tabulek, rychlejšího výkonu dotazů a snížení nákladů. Pokud chcete migrovat externí tabulky do spravovaných tabulek, přečtěte si téma Převod externích nebo cizích tabulek Delta Lake do spravovaných tabulek Služby Unity.

Důležité

Pokud aktualizujete metadata externí tabulky pomocí klienta jiného než Databricks nebo pomocí přístupu založeného na cestě v Databricks, tato metadata se automaticky nesynchronizují se stavem v Unity Catalog. Databricks nedoporučuje tyto aktualizace metadat, ale pokud je přesto provedete, musíte spustit MSCK REPAIR TABLE <table-name> SYNC METADATA, aby bylo schéma v katalogu Unity aktuální. Viz REPAIR TABLE.

Formáty souborů pro externí tabulky

Externí tabulky můžou používat následující formáty souborů:

  • DELTA
  • formát CSV
  • JSON
  • AVRO
  • PARKETY
  • OCR (Optické rozpoznávání znaků)
  • TEXT

Vytvoření externí tabulky

Externí tabulky můžete vytvářet pomocí příkazů SQL nebo operací zápisu do datového rámce.

Než začnete

Než vytvoříte externí tabulku, musíte nejprve nakonfigurovat externí umístění, které uděluje přístup ke cloudovému úložišti.

Další informace o konfiguraci externích umístění najdete v tématu Pojení k externímu umístění Azure Data Lake Storage Gen2 (ADLS Gen2.

Pokud chcete vytvořit externí tabulku, musíte splňovat následující požadavky na oprávnění:

  • Oprávnění CREATE EXTERNAL TABLE pro externí umístění, které uděluje přístup k LOCATION, k němuž přistupuje externí tabulka.
  • Oprávnění USE CATALOG k katalogu nadřazenému tabulce.
  • Oprávnění USE SCHEMA nadřazeného schématu tabulky.
  • Oprávnění CREATE TABLE nadřazeného schématu tabulky.

Poznámka:

Pokud je externí umístění S3 přidružené k více metastorům, vyhněte se udělení přístupu k zápisu do tabulek, které používají toto umístění S3, protože zápisy z různých metastorů do stejné externí tabulky můžou způsobit problémy s konzistencí. Čtení ze stejného externího umístění S3 ve více metastorech je však bezpečné.

Příklad

K vytvoření externí tabulky použijte jeden z následujících příkladů v poznámkovém bloku nebo editoru dotazů SQL.

V následujících příkladech nahraďte zástupné hodnoty:

  • <catalog>: Název katalogu, který bude obsahovat tabulku.
  • <schema>: Název schématu, které bude obsahovat tabulku.
  • <table-name>: Název tabulky.
  • <column-name> and <data-type>: Název a datový typ pro každý sloupec.
  • <bucket-path>: Cesta k kontejneru cloudového úložiště, kde se vytvoří tabulka.
  • <table-directory>: Adresář, ve kterém se vytvoří tabulka. Pro každou tabulku použijte jedinečný adresář.
  • <source-table>: Tabulka, která se má použít jako zdroj dat při vytváření tabulky z výsledků dotazu.

SQL

Pokud chcete v ADLS Gen2 vytvořit externí tabulku s definovaným schématem, spusťte následující příkaz:

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

Pokud chcete ve výsledcích dotazu vytvořit externí tabulku v ADLS Gen2, spusťte následující příkaz:

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

Pokud chcete v S3 vytvořit externí tabulku s definovaným schématem, spusťte následující příkaz:

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

Pokud chcete vytvořit externí tabulku ve S3 z výsledků dotazu, spusťte následující příkaz:

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

Python

Pokud chcete v ADLS Gen2 vytvořit externí tabulku s definovaným schématem, spusťte následující příkaz:

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>")

Pokud chcete vytvořit externí tabulku v ADLS Gen2 z datového rámce, spusťte následující příkaz:

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

Pokud chcete v S3 vytvořit externí tabulku s definovaným schématem, spusťte následující příkaz:

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>")

Pokud chcete vytvořit externí tabulku v S3 z datového rámce, spusťte následující příkaz:

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

Další informace o parametrech vytvoření tabulky najdete v tématu CREATE TABLE.

Následující možnosti syntaxe SQL fungují s operacemi datového rámce:

Odstranění externí tabulky

Pokud chcete tabulku odstranit, musíte být jejím vlastníkem nebo mít u tabulky oprávnění MANAGE. Pokud chcete vložit externí tabulku, spusťte následující příkaz:

SQL

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Python

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

Alternativně v Databricks Runtime 18.2 a novější použijte spark.catalog.dropTable():

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

Při vyřazení externí tabulky katalog Unity neodstraní podkladová data v cloudovém úložišti. Pokud potřebujete odebrat data přidružená k tabulce, musíte přímo odstranit podkladové datové soubory.

ukázkový poznámkový blok: Vytvoření externích tabulek

Následující ukázkový poznámkový blok můžete použít k vytvoření katalogu, schématu a externí tabulky a ke správě oprávnění k nim.

Vytvoření a správa externí tabulky v poznámkovém bloku katalogu Unity

Pořiďte si poznámkový blok