Tabellen maken in Unity Catalog
In dit artikel wordt het concept van beheerde en externe tabellen in Unity Catalog geïntroduceerd en wordt beschreven hoe u tabellen maakt in Unity Catalog.
Notitie
Wanneer u een tabel maakt, moet u verwijzen naar een catalogus die wordt beheerd door Unity Catalog of de standaardcatalogus instellen op een catalogus die onder Unity Catalog valt. Zie De standaardcatalogus beheren.
De catalogus hive_metastore
wordt weergegeven in Catalog Explorer, maar wordt niet beschouwd als beheerd door Unity Catalog. Het wordt beheerd door de Hive-metastore van uw Azure Databricks-werkruimte. Alle andere vermelde catalogussen vallen onder Unity Catalog.
U kunt de upgrade-interface van de Unity Catalog-tabel gebruiken om bestaande tabellen te upgraden die zijn geregistreerd in de Hive-metastore naar Unity Catalog. Zie Hive-tabellen en -weergaven upgraden naar Unity Catalog.
Beheerde tabellen
Beheerde tabellen zijn de standaard manier om tabellen te maken in Unity Catalog. Unity Catalog beheert de levenscyclus en de bestandsindeling voor deze tabellen. Gebruik geen hulpprogramma's buiten Azure Databricks om bestanden in deze tabellen rechtstreeks te bewerken.
Beheerde tabellen worden opgeslagen in beheerde opslag, hetzij op metastore-, catalogus- of schemaniveau, afhankelijk van de configuratie van het schema en de catalogus. Zie Een beheerde opslaglocatie opgeven in Unity Catalog.
Beheerde tabellen maken altijd gebruik van de Delta-tabelindeling .
Wanneer een beheerde tabel wordt verwijderd, worden de onderliggende gegevens binnen 30 dagen verwijderd uit uw cloudtenant.
Externe tabellen
Externe tabellen zijn tabellen waarvan de gegevens worden opgeslagen buiten de beheerde opslaglocatie die is opgegeven voor de metastore, catalogus of schema. Gebruik externe tabellen alleen als u directe toegang tot de gegevens buiten Azure Databricks-clusters of Databricks SQL-warehouses nodig hebt.
Wanneer u op een externe tabel uitvoert DROP TABLE
, worden de onderliggende gegevens niet verwijderd in Unity Catalog. Als u een tabel wilt verwijderen, moet u de eigenaar zijn. U kunt bevoegdheden voor externe tabellen beheren en gebruiken in query's op dezelfde manier als beheerde tabellen. Als u een externe tabel met SQL wilt maken, geeft u een LOCATION
pad op in uw CREATE TABLE
instructie. Externe tabellen kunnen de volgende bestandsindelingen gebruiken:
- DELTA
- CSV
- JSON
- AVRO
- PARKET
- ORC
- TEKST
Als u de toegang tot de onderliggende cloudopslag voor een externe tabel wilt beheren, moet u opslagreferenties en externe locaties instellen.
Zie Een externe tabel maken voor meer informatie.
Vereisten
U moet de CREATE TABLE
bevoegdheid hebben voor het schema waarin u de tabel wilt maken, evenals de bevoegdheid voor het schema en de USE SCHEMA
USE CATALOG
bevoegdheid voor de bovenliggende catalogus.
Zie Een externe tabel maken voor aanvullende vereisten als u een externe tabel maakt.
Een beheerde tabel maken
Voer de volgende SQL-opdracht uit om een beheerde tabel te maken. Items tussen haakjes zijn optioneel. Vervang de waarden van de tijdelijke aanduidingen:
<catalog-name>
: De naam van de catalogus die de tabel bevat.Dit kan niet de
hive_metastore
catalogus zijn die automatisch wordt gemaakt voor de Hive-metastore die is gekoppeld aan uw Azure Databricks-werkruimte. U kunt de catalogusnaam verwijderen als u de tabel in de standaardcatalogus van de werkruimte maakt.<schema-name>
: De naam van het schema dat de tabel bevat.<table-name>
: Een naam voor de tabel.<column-specification>
: De naam en het gegevenstype voor elke kolom.
SQL
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
<column-specification>
);
Python
spark.sql("CREATE TABLE <catalog-name>.<schema-name>.<table-name> "
"("
" <column-specification>"
")")
R
library(SparkR)
sql(paste("CREATE TABLE <catalog-name>.<schema-name>.<table-name> ",
"(",
" <column-specification>",
")",
sep = ""))
Scala
spark.sql("CREATE TABLE <catalog-name>.<schema-name>.<table-name> " +
"(" +
" <column-specification>" +
")")
U kunt ook een beheerde tabel maken met behulp van de Databricks Terraform-provider en databricks_table. U kunt een lijst met volledige tabelnamen ophalen met behulp van databricks_tables.
Als u bijvoorbeeld de tabel main.default.department
wilt maken en er vijf rijen in wilt invoegen:
SQL
CREATE TABLE main.default.department
(
deptcode INT,
deptname STRING,
location STRING
);
INSERT INTO main.default.department VALUES
(10, 'FINANCE', 'EDINBURGH'),
(20, 'SOFTWARE', 'PADDINGTON'),
(30, 'SALES', 'MAIDSTONE'),
(40, 'MARKETING', 'DARLINGTON'),
(50, 'ADMIN', 'BIRMINGHAM');
Python
spark.sql("CREATE TABLE main.default.department "
"("
" deptcode INT,"
" deptname STRING,"
" location STRING"
")"
"INSERT INTO main.default.department VALUES "
" (10, 'FINANCE', 'EDINBURGH'),"
" (20, 'SOFTWARE', 'PADDINGTON'),"
" (30, 'SALES', 'MAIDSTONE'),"
" (40, 'MARKETING', 'DARLINGTON'),"
" (50, 'ADMIN', 'BIRMINGHAM')")
R
library(SparkR)
sql(paste("CREATE TABLE main.default.department ",
"(",
" deptcode INT,",
" deptname STRING,",
" location STRING",
")",
"INSERT INTO main.default.department VALUES ",
" (10, 'FINANCE', 'EDINBURGH'),",
" (20, 'SOFTWARE', 'PADDINGTON'),",
" (30, 'SALES', 'MAIDSTONE'),",
" (40, 'MARKETING', 'DARLINGTON'),",
" (50, 'ADMIN', 'BIRMINGHAM')",
sep = ""))
Scala
spark.sql("CREATE TABLE main.default.department " +
"(" +
" deptcode INT," +
" deptname STRING," +
" location STRING" +
")" +
"INSERT INTO main.default.department VALUES " +
" (10, 'FINANCE', 'EDINBURGH')," +
" (20, 'SOFTWARE', 'PADDINGTON')," +
" (30, 'SALES', 'MAIDSTONE')," +
" (40, 'MARKETING', 'DARLINGTON')," +
" (50, 'ADMIN', 'BIRMINGHAM')")
Een beheerde tabel verwijderen
U moet de eigenaar van de tabel zijn om een tabel te verwijderen. Als u een beheerde tabel wilt verwijderen, voert u de volgende SQL-opdracht uit:
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;
Wanneer een beheerde tabel wordt verwijderd, worden de onderliggende gegevens binnen 30 dagen verwijderd uit uw cloudtenant.
Een externe tabel maken
De gegevens in een externe tabel worden opgeslagen in een pad in uw cloudtenant. Voor het werken met externe tabellen introduceert Unity Catalog twee objecten om toegang te krijgen tot en te werken met externe cloudopslag:
- Een opslagreferentie bevat een verificatiemethode voor toegang tot een cloudopslaglocatie. De opslagreferentie bevat geen toewijzing aan het pad waarnaar toegang wordt verleend. Opslagreferenties worden door toegang beheerd om te bepalen welke gebruikers de referentie kunnen gebruiken.
- Een externe locatie wijst een opslagreferentie toe aan een cloudopslagpad waaraan toegang wordt verleend. De externe locatie verleent alleen toegang tot dat cloudopslagpad en de inhoud ervan. Externe locaties worden door toegang beheerd om te bepalen welke gebruikers ze kunnen gebruiken. Er wordt automatisch een externe locatie gebruikt wanneer uw SQL-opdracht een
LOCATION
component bevat.
Vereisten
Als u een externe tabel wilt maken, moet u het volgende hebben:
- De
CREATE EXTERNAL TABLE
bevoegdheid op een externe locatie die toegang verleent tot deLOCATION
toegang die door de externe tabel wordt geopend. - De
USE SCHEMA
machtiging voor het bovenliggende schema van de tabel. - De
USE CATALOG
machtiging voor de bovenliggende catalogus van de tabel. - De
CREATE TABLE
machtiging voor het bovenliggende schema van de tabel.
Externe locaties en opslagreferenties worden op metastoreniveau opgeslagen in plaats van in een catalogus. Als u een opslagreferentie wilt maken, moet u een accountbeheerder zijn of over de CREATE STORAGE CREDENTIAL
bevoegdheid beschikken. Als u een externe locatie wilt maken, moet u de metastore-beheerder zijn of over de CREATE EXTERNAL LOCATION
bevoegdheid beschikken. Zie Verbinding maken naar cloudobjectopslag met behulp van Unity Catalog.
Een tabel maken
Gebruik een van de volgende opdrachtvoorbeelden in een notebook of de SQL-queryeditor om een externe tabel te maken.
U kunt ook een voorbeeldnotitieblok gebruiken om de opslagreferentie, externe locatie en externe tabel te maken en machtigingen voor deze notebooks te beheren.
Vervang in de volgende voorbeelden de waarden van de tijdelijke aanduiding:
<catalog>
: De naam van de catalogus die de tabel bevat.Dit kan niet de
hive_metastore
catalogus zijn die automatisch wordt gemaakt voor de Hive-metastore die is gekoppeld aan uw Azure Databricks-werkruimte. U kunt de catalogusnaam verwijderen als u de tabel in de standaardcatalogus van de werkruimte maakt.<schema>
: De naam van het schema dat de tabel bevat.<table-name>
: Een naam voor de tabel.<column-specification>
: 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.
Belangrijk
Zodra een tabel in een pad is gemaakt, hebben gebruikers geen rechtstreeks toegang meer tot de bestanden in dat pad vanuit Azure Databricks, zelfs als ze bevoegdheden hebben gekregen op een externe locatie of opslagreferentie om dit te doen. Dit is om ervoor te zorgen dat gebruikers geen toegangsbeheer kunnen omzeilen die zijn toegepast op tabellen door bestanden rechtstreeks vanuit uw cloudtenant te lezen.
SQL
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Python
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
"("
" <column-specification>"
") "
"LOCATION 'abfss://<bucket-path>/<table-directory>'")
R
library(SparkR)
sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
"(",
" <column-specification>",
") ",
"LOCATION 'abfss://<bucket-path>/<table-directory>'",
sep = ""))
Scala
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
"(" +
" <column-specification>" +
") " +
"LOCATION 'abfss://<bucket-path>/<table-directory>'")
Unity Catalog controleert of u over de volgende machtigingen beschikt:
CREATE EXTERNAL TABLE
op de externe locatie die verwijst naar het cloudopslagpad dat u opgeeft.CREATE TABLE
in het bovenliggende schema.USE SCHEMA
in het bovenliggende schema.USE CATALOG
in de bovenliggende catalogus.
Als u dit doet, wordt de externe tabel gemaakt. Anders treedt er een fout op en wordt de externe tabel niet gemaakt.
Notitie
U kunt in plaats daarvan een bestaande externe tabel in de Hive-metastore migreren naar Unity Catalog zonder de gegevens te dupliceren. Zie Een enkele Hive-tabel upgraden naar een externe tabel van Unity Catalog met behulp van de upgradewizard.
U kunt ook een externe tabel maken met behulp van de Databricks Terraform-provider en databricks_table. U kunt een lijst met volledige tabelnamen ophalen met behulp van databricks_tables.
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.
Een externe tabel maken en beheren in Unity Catalog-notebook
Een tabel maken op basis van bestanden die zijn opgeslagen in uw cloudtenant
U kunt een beheerde of externe tabel vullen met records uit bestanden die zijn opgeslagen in uw cloudtenant. Unity Catalog leest de bestanden op die locatie en voegt de inhoud in de tabel in. In Unity Catalog wordt dit padgebaseerde toegang genoemd.
U kunt de voorbeelden in deze sectie volgen of de gebruikersinterface voor het toevoegen van gegevens gebruiken.
De inhoud van de bestanden verkennen
Als u gegevens wilt verkennen die zijn opgeslagen op een externe locatie voordat u tabellen op basis van die gegevens maakt, kunt u Catalog Explorer of de volgende opdrachten gebruiken.
Vereiste machtigingen: U moet beschikken over de READ FILES
machtiging voor de externe locatie die is gekoppeld aan het cloudopslagpad om een lijst met gegevensbestanden op die locatie te retourneren.
Sql
De bestanden in een cloudopslagpad weergeven:
LIST 'abfss://<path-to-files>';
Voer een query uit op de gegevens in de bestanden in een bepaald pad:
SELECT * FROM <format>.`abfss://<path-to-files>`;
Python
De bestanden in een cloudopslagpad weergeven:
display(spark.sql("LIST 'abfss://<path-to-files>'"))
Voer een query uit op de gegevens in de bestanden in een bepaald pad:
display(spark.read.load("abfss://<path-to-files>"))
R
De bestanden in een cloudopslagpad weergeven:
library(SparkR) display(sql("LIST 'abfss://<path-to-files>'"))
Voer een query uit op de gegevens in de bestanden in een bepaald pad:
library(SparkR) display(loadDF("abfss://<path-to-files>"))
Scala
De bestanden in een cloudopslagpad weergeven:
display(spark.sql("LIST 'abfss://<path-to-files>'"))
Voer een query uit op de gegevens in de bestanden in een bepaald pad:
display(spark.read.load("abfss://<path-to-files>"))
Een tabel maken op basis van de bestanden
Volg de voorbeelden in deze sectie om een nieuwe tabel te maken en deze te vullen met gegevensbestanden in uw cloudtenant.
Notitie
U kunt in plaats daarvan een bestaande externe tabel in de Hive-metastore migreren naar Unity Catalog zonder de gegevens te dupliceren. Zie Een enkele Hive-tabel upgraden naar een externe tabel van Unity Catalog met behulp van de upgradewizard.
Belangrijk
- Wanneer u een tabel maakt met deze methode, wordt het opslagpad slechts één keer gelezen om duplicatie van records te voorkomen. Als u de inhoud van de map opnieuw wilt lezen, moet u de tabel verwijderen en opnieuw maken. Voor een bestaande tabel kunt u records invoegen vanuit een opslagpad.
- Het bucketpad waarin u een tabel maakt, kan niet ook worden gebruikt voor het lezen of schrijven van gegevensbestanden.
- Alleen de bestanden in de exacte map worden gelezen; de leesbewerking niet recursief is.
- U moet over de volgende machtigingen beschikken:
USE CATALOG
in de bovenliggende catalogus enUSE SCHEMA
in het schema.CREATE TABLE
in het bovenliggende schema.READ FILES
op de externe locatie die is gekoppeld aan het bucketpad waar de bestanden zich bevinden, of rechtstreeks op de opslagreferentie als u geen externe locatie gebruikt.- Als u een externe tabel maakt, moet
CREATE EXTERNAL TABLE
u op het bucketpad waar de tabel wordt gemaakt.
Gebruik de volgende voorbeelden om een nieuwe beheerde tabel te maken en deze te vullen met gegevens in uw cloudopslag.
SQL
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
SELECT * from <format>.`abfss://<path-to-files>`;
Python
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
"( "
" <column-specification> "
") "
"SELECT * from <format>.`abfss://<path-to-files>`")
R
library(SparkR)
sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
"( ",
" <column-specification> ",
") ",
"SELECT * from <format>.`abfss://<path-to-files>`",
sep = ""))
Scala
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
"( " +
" <column-specification> " +
") " +
"SELECT * from <format>.`abfss://<path-to-files>`")
Als u een externe tabel wilt maken en deze wilt vullen met gegevens in uw cloudopslag, voegt u een LOCATION
component toe:
SQL
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
USING <format>
LOCATION 'abfss://<table-location>'
SELECT * from <format>.`abfss://<path-to-files>`;
Python
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
"( "
" <column-specification> "
") "
"USING <format> "
"LOCATION 'abfss://<table-location>' "
"SELECT * from <format>.`abfss://<path-to-files>`")
R
library(SparkR)
sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
"( ",
" <column-specification> ",
") ",
"USING <format> ",
"LOCATION 'abfss://<table-location>' ",
"SELECT * from <format>.`abfss://<path-to-files>`",
sep = ""))
Scala
spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
"( " +
" <column-specification> " +
") " +
"USING <format> " +
"LOCATION 'abfss://<table-location>' " +
"SELECT * from <format>.`abfss://<path-to-files>`")
Records uit een pad invoegen in een bestaande tabel
Als u records uit een bucketpad wilt invoegen in een bestaande tabel, gebruikt u de COPY INTO
opdracht. Vervang in de volgende voorbeelden de waarden van de tijdelijke aanduiding:
<catalog>
: De naam van de bovenliggende catalogus van de tabel.<schema>
: De naam van het bovenliggende schema van de tabel.<path-to-files>
: het bucketpad dat de gegevensbestanden bevat.<format>
: De indeling van de bestanden, bijvoorbeelddelta
.<table-location>
: het bucketpad waar de tabel wordt gemaakt.
Belangrijk
- Wanneer u records invoegt in een tabel met deze methode, wordt het bucketpad dat u opgeeft slechts één keer gelezen om duplicatie van records te voorkomen.
- Het bucketpad waarin u een tabel maakt, kan niet ook worden gebruikt voor het lezen of schrijven van gegevensbestanden.
- Alleen de bestanden in de exacte map worden gelezen; de leesbewerking niet recursief is.
- U moet over de volgende machtigingen beschikken:
USE CATALOG
in de bovenliggende catalogus enUSE SCHEMA
in het schema.MODIFY
op de tabel.READ FILES
op de externe locatie die is gekoppeld aan het bucketpad waar de bestanden zich bevinden, of rechtstreeks op de opslagreferentie als u geen externe locatie gebruikt.- Als u records wilt invoegen in een externe tabel, moet
CREATE EXTERNAL TABLE
u op het bucketpad waar de tabel zich bevindt.
Als u records uit bestanden in een bucketpad wilt invoegen in een beheerde tabel, gebruikt u een externe locatie om het bucketpad te lezen:
SQL
COPY INTO <catalog>.<schema>.<table>
FROM (
SELECT *
FROM 'abfss://<path-to-files>'
)
FILEFORMAT = <format>;
Python
spark.sql("COPY INTO <catalog>.<schema>.<table> "
"FROM ( "
" SELECT * "
" FROM 'abfss://<path-to-files>' "
") "
"FILEFORMAT = <format>")
R
library(SparkR)
sql(paste("COPY INTO <catalog>.<schema>.<table> ",
"FROM ( ",
" SELECT * ",
" FROM 'abfss://<path-to-files>' ",
") ",
"FILEFORMAT = <format>",
sep = ""))
Scala
spark.sql("COPY INTO <catalog>.<schema>.<table> " +
"FROM ( " +
" SELECT * " +
" FROM 'abfss://<path-to-files>' " +
") " +
"FILEFORMAT = <format>")
Als u in een externe tabel wilt invoegen, voegt u een LOCATION
component toe:
SQL
COPY INTO <catalog>.<schema>.<table>
LOCATION 'abfss://<table-location>'
FROM (
SELECT *
FROM 'abfss://<path-to-files>'
)
FILEFORMAT = <format>;
Python
spark.sql("COPY INTO <catalog>.<schema>.<table> "
"LOCATION 'abfss://<table-location>' "
"FROM ( "
" SELECT * "
" FROM 'abfss://<path-to-files>' "
") "
"FILEFORMAT = <format>")
R
library(SparkR)
sql(paste("COPY INTO <catalog>.<schema>.<table> ",
"LOCATION 'abfss://<table-location>' ",
"FROM ( ",
" SELECT * ",
" FROM 'abfss://<path-to-files>' ",
") ",
"FILEFORMAT = <format>",
sep = ""))
Scala
spark.sql("COPY INTO <catalog>.<schema>.<table> " +
"LOCATION 'abfss://<table-location>' " +
"FROM ( " +
" SELECT * " +
" FROM 'abfss://<path-to-files>' " +
") " +
"FILEFORMAT = <format>")
Opmerkingen toevoegen aan een tabel
Als eigenaar van een tabel of gebruiker met de MODIFY
bevoegdheid voor een tabel, kunt u opmerkingen toevoegen aan een tabel en de bijbehorende kolommen. U kunt opmerkingen toevoegen met behulp van de volgende functionaliteit:
- De opdracht COMMENT ON . Deze optie biedt geen ondersteuning voor kolomopmerkingen.
- De
COMMENT
optie wanneer u de opdrachten CREATE TABLE en ALTER TABLE gebruikt. Deze optie ondersteunt kolomopmerkingen. - Het opmerkingveld 'handmatig' in Catalog Explorer. Deze optie ondersteunt kolomopmerkingen. Zie Documentgegevens in Catalog Explorer met behulp van Markdown-opmerkingen.
- Door AI gegenereerde opmerkingen (ook wel door AI gegenereerde documentatie genoemd) in Catalog Explorer. U kunt een opmerking bekijken die wordt voorgesteld door een groot taalmodel (LLM), waarbij rekening wordt gehouden met de metagegevens van de tabel, zoals het tabelschema en de kolomnamen, en de opmerking bewerken of accepteren zoals het is om deze toe te voegen. Zie Door AI gegenereerde opmerkingen toevoegen aan een tabel.
Volgende stappen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor