Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In Unity Catalog slaat een externe tabel de gegevensbestanden op in de opslag van cloudobjecten in uw cloudtenant. Unity Catalog blijft de metagegevens van de tabel beheren en zorgt voor volledig gegevensbeheer voor alle query's. De levenscyclus, optimalisatie, opslaglocatie of indeling van de gegevens worden echter niet beheerd.
Wanneer u een externe tabel van Unity Catalog definieert, moet u een opslaglocatie opgeven. Deze locatie is een externe locatie die is geregistreerd in Unity Catalog. Wanneer u een externe tabel verwijdert, verwijdert Unity Catalog de metagegevens van de tabel, maar worden de onderliggende gegevensbestanden niet verwijderd.
Deze pagina is gericht op externe tabellen van Unity Catalog. Externe tabellen in de verouderde Hive-metastore hebben verschillende gedragingen. Zie Databaseobjecten in de verouderde Hive-metastore.
Wanneer externe tabellen gebruiken
Databricks raadt het gebruik van externe tabellen aan voor de volgende use cases:
- U moet een tabel registreren die wordt ondersteund door bestaande gegevens die niet compatibel zijn met door Unity Catalog beheerde tabellen, zoals JSON of Avro. Zie Bestandsindelingen voor externe tabellen.
- U hebt directe toegang nodig tot de gegevens van niet-Databricks-clients die geen ondersteuning bieden voor andere externe toegangspatronen. Unity Catalog-bevoegdheden worden niet afgedwongen wanneer gebruikers toegang hebben tot gegevensbestanden van externe systemen. Zie Toegang tot Databricks-gegevens met behulp van externe systemen.
In de meeste gevallen raadt Databricks aan om beheerde tabellen van Unity Catalog te gebruiken om te profiteren van automatische tabeloptimalisatie, snellere queryprestaties en lagere kosten. Zie Externe of vreemde Delta Lake-tabellen converteren naar door Unity Catalog beheerde tabellen om externe tabellen naar beheerde tabellen te migreren.
Belangrijk
Als u metagegevens van externe tabellen bijwerkt met behulp van een niet-Databricks-client of met behulp van padgebaseerde toegang vanuit Databricks, worden de metagegevens niet automatisch gesynchroniseerd met Unity Catalog. Databricks raadt aan tegen dergelijke metagegevensupdates, maar als u er een uitvoert, moet u MSCK REPAIR TABLE <table-name> SYNC METADATA uitvoeren om het schema in Unity Catalog up-to-date te brengen. Zie REPAIR TABLE.
Bestandsindelingen voor externe tabellen
Externe tabellen kunnen de volgende bestandsindelingen gebruiken:
- DELTA
- CSV-bestand
- JSON
- AVRO
- PARKET
- orc
- Tekst
Een externe tabel maken
U kunt externe tabellen maken met behulp van SQL-opdrachten of DataFrame-schrijfbewerkingen.
Voordat u begint
Voordat u een externe tabel maakt, moet u eerst een externe locatie configureren die toegang verleent tot uw cloudopslag.
Zie Connect to an Azure Data Lake Storage Gen2 (ADLS Gen2) external location voor meer informatie over het configureren van externe locaties.
Als u een externe tabel wilt maken, moet u voldoen aan de volgende machtigingsvereisten:
- De bevoegdheid
CREATE EXTERNAL TABLEop een externe locatie die toegang verleent tot deLOCATIONwaartoe de externe tabel toegang heeft. - De
USE CATALOGmachtiging voor de bovenliggende catalogus van de tabel. - De
USE SCHEMApermissie voor het bovenliggende schema van de tabel. - De
CREATE TABLEpermissie voor het bovenliggende schema van de tabel.
Opmerking
Wanneer een externe S3-locatie is gekoppeld aan meerdere metastores, vermijdt u het verlenen van schrijftoegang tot tabellen die gebruikmaken van die S3-locatie, omdat schrijfbewerkingen van verschillende metastores naar dezelfde externe tabel consistentieproblemen kunnen veroorzaken. Het lezen vanaf dezelfde externe S3-locatie in meerdere metastores is echter veilig.
Voorbeelden
Gebruik een van de volgende voorbeelden in een notebook of de SQL-queryeditor om een externe tabel te maken.
Vervang in de volgende voorbeelden de plaatshouderwaarden.
-
<catalog>: de naam van de catalogus die de tabel bevat. -
<schema>: de naam van het schema dat de tabel bevat. -
<table-name>: een naam voor de tabel. -
<column-name>en<data-type>: de naam en het gegevenstype voor elke kolom. -
<bucket-path>: het pad naar de cloudopslagbucket waar de tabel wordt gemaakt. -
<table-directory>: een map waarin de tabel wordt gemaakt. Gebruik een unieke map voor elke tabel. -
<source-table>: Een tabel die moet worden gebruikt als gegevensbron bij het maken van een tabel op basis van queryresultaten.
SQL
Als u een externe tabel wilt maken in ADLS Gen2 met een gedefinieerd schema, voert u het volgende uit:
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-name> <data-type>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Als u een externe tabel in ADLS Gen2 wilt maken op basis van queryresultaten, voert u het volgende uit:
CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 'abfss://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;
Als u een externe tabel in S3 wilt maken met een gedefinieerd schema, voert u het volgende uit:
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-name> <data-type>
)
LOCATION 's3://<bucket-path>/<table-directory>';
Als u een externe tabel in S3 wilt maken op basis van queryresultaten, voert u het volgende uit:
CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 's3://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;
Python
Als u een externe tabel wilt maken in ADLS Gen2 met een gedefinieerd schema, voert u het volgende uit:
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>")
Als u een externe tabel in ADLS Gen2 wilt maken vanuit een DataFrame, voert u het volgende uit:
df.write \
.option("path", "abfss://<bucket-path>/<table-directory>") \
.saveAsTable("<catalog>.<schema>.<table-name>")
Als u een externe tabel in S3 wilt maken met een gedefinieerd schema, voert u het volgende uit:
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>")
Als u een externe tabel in S3 wilt maken vanuit een DataFrame, voert u het volgende uit:
df.write \
.option("path", "s3://<bucket-path>/<table-directory>") \
.saveAsTable("<catalog>.<schema>.<table-name>")
Zie CREATE TABLEvoor meer informatie over parameters voor het maken van tabellen.
De volgende SQL-syntaxisopties werken met DataFrame-bewerkingen:
Een externe tabel neerzetten
Als u een tabel wilt verwijderen, moet u de eigenaar zijn of de bevoegdheid MANAGE voor de tabel hebben. Als u een externe tabel wilt verwijderen, voert u de volgende opdracht uit:
SQL
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;
Python
spark.sql("DROP TABLE IF EXISTS catalog_name.schema_name.table_name")
U kunt ook in Databricks Runtime 18.2 en hoger het volgende gebruiken spark.catalog.dropTable():
spark.catalog.dropTable("catalog_name.schema_name.table_name", ifExists=True)
Unity Catalog verwijdert de onderliggende gegevens in de cloudopslag niet wanneer u een externe tabel neer zet. U moet de onderliggende gegevensbestanden rechtstreeks verwijderen als u gegevens wilt verwijderen die aan de tabel zijn gekoppeld.
voorbeeldnotitieblok: externe tabellen maken
U kunt het volgende voorbeeldnotitieblok gebruiken om een catalogus, schema en externe tabel te maken en machtigingen voor deze tabellen te beheren.