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 SCHEMAUSE 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 de LOCATION 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

Notebook downloaden

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

  1. De bestanden in een cloudopslagpad weergeven:

    LIST 'abfss://<path-to-files>';
    
  2. Voer een query uit op de gegevens in de bestanden in een bepaald pad:

    SELECT * FROM <format>.`abfss://<path-to-files>`;
    

Python

  1. De bestanden in een cloudopslagpad weergeven:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. Voer een query uit op de gegevens in de bestanden in een bepaald pad:

    display(spark.read.load("abfss://<path-to-files>"))
    

R

  1. De bestanden in een cloudopslagpad weergeven:

    library(SparkR)
    
    display(sql("LIST 'abfss://<path-to-files>'"))
    
  2. Voer een query uit op de gegevens in de bestanden in een bepaald pad:

    library(SparkR)
    
    display(loadDF("abfss://<path-to-files>"))
    

Scala

  1. De bestanden in een cloudopslagpad weergeven:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. 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 en USE 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, bijvoorbeeld delta.
  • <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 en USE 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:

Volgende stappen