Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 TABLEpro externí umístění, které uděluje přístup kLOCATION, k němuž přistupuje externí tabulka. - Oprávnění
USE CATALOGk katalogu nadřazenému tabulce. - Oprávnění
USE SCHEMAnadřazeného schématu tabulky. - Oprávnění
CREATE TABLEnadř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