Skapa tabeller i Unity Catalog

Den här artikeln beskriver begreppet hanterade och externa tabeller i Unity Catalog och beskriver hur du skapar tabeller i Unity Catalog.

Kommentar

När du skapar en tabell bör du referera till en katalog som styrs av Unity Catalog eller ange standardkatalogen till en katalog som styrs av Unity Catalog. Se Hantera standardkatalogen.

Katalogen hive_metastore visas i Katalogutforskaren men anses inte styras av Unity Catalog. Det hanteras av Din Azure Databricks-arbetsytas Hive-metaarkiv. Alla andra kataloger som listas styrs av Unity Catalog.

Du kan använda unity catalog-tabelluppgraderingsgränssnittet för att uppgradera befintliga tabeller som är registrerade i Hive-metaarkivet till Unity Catalog. Se Uppgradera Hive-tabeller och vyer till Unity Catalog.

Hanterade tabeller

Hanterade tabeller är standardsättet för att skapa tabeller i Unity Catalog. Unity Catalog hanterar livscykeln och fillayouten för dessa tabeller. Du bör inte använda verktyg utanför Azure Databricks för att ändra filer i dessa tabeller direkt.

Hanterade tabeller lagras i hanterad lagring, antingen på metaarkiv-, katalog- eller schemanivå, beroende på hur schemat och katalogen konfigureras. Se Ange en hanterad lagringsplats i Unity Catalog.

Hanterade tabeller använder alltid deltatabellformatet .

När en hanterad tabell tas bort tas dess underliggande data bort från molnklientorganisationen inom 30 dagar.

Externa tabeller

Externa tabeller är tabeller vars data lagras utanför den hanterade lagringsplats som angetts för metaarkivet, katalogen eller schemat. Använd endast externa tabeller när du behöver direkt åtkomst till data utanför Azure Databricks-kluster eller Databricks SQL-lager.

När du kör DROP TABLE på en extern tabell tar Unity Catalog inte bort underliggande data. Om du vill släppa en tabell måste du vara dess ägare. Du kan hantera behörigheter för externa tabeller och använda dem i frågor på samma sätt som hanterade tabeller. Om du vill skapa en extern tabell med SQL anger du en LOCATION sökväg i - CREATE TABLE instruktionen. Externa tabeller kan använda följande filformat:

  • DELTA
  • CSV
  • JSON
  • AVRO
  • PARKETT
  • ORC
  • TEXT

Om du vill hantera åtkomsten till den underliggande molnlagringen för en extern tabell måste du konfigurera autentiseringsuppgifter för lagring och externa platser.

Mer information finns i Skapa en extern tabell.

Krav

Du måste ha behörigheten CREATE TABLE för schemat där du vill skapa tabellen, samt behörigheten USE SCHEMA för schemat och behörigheten USE CATALOG i den överordnade katalogen.

Om du skapar en extern tabell kan du läsa Skapa en extern tabell för ytterligare krav.

Skapa en hanterad tabell

Kör följande SQL-kommando för att skapa en hanterad tabell. Du kan också använda notebook-exempelanteckningsboken för att skapa en tabell. Objekt inom hakparenteser är valfria. Ersätt platshållarvärdena:

  • <catalog-name>: Namnet på katalogen som ska innehålla tabellen..

    Det kan inte vara katalogen hive_metastore som skapas automatiskt för Hive-metaarkivet som är associerat med din Azure Databricks-arbetsyta. Du kan släppa katalognamnet om du skapar tabellen i arbetsytans standardkatalog.

  • <schema-name>: Namnet på schemat som ska innehålla tabellen..

  • <table-name>: Ett namn på tabellen.

  • <column-specification>: Namn och datatyp för varje kolumn.

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

Du kan också skapa en hanterad tabell med hjälp av Databricks Terraform-providern och databricks_table. Du kan hämta en lista med fullständiga tabellnamn med hjälp av databricks_tables.

Om du till exempel vill skapa tabellen main.default.department och infoga fem rader i den:

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

Exempel på notebook-fil: Skapa hanterade tabeller

Du kan använda följande notebook-exempel för att skapa en katalog, ett schema och en hanterad tabell och för att hantera behörigheter för dem.

Skapa och hantera en tabell i Unity Catalog med hjälp av Python Notebook

Hämta notebook-fil

Skapa och hantera en tabell i Unity Catalog med hjälp av SQL Notebook

Hämta notebook-fil

Ta bort en hanterad tabell

Du måste vara tabellens ägare för att släppa en tabell. Om du vill släppa en hanterad tabell kör du följande SQL-kommando:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

När en hanterad tabell tas bort tas dess underliggande data bort från molnklientorganisationen inom 30 dagar.

Skapa en extern tabell

Data i en extern tabell lagras i en sökväg i din molnklientorganisation. För att arbeta med externa tabeller introducerar Unity Catalog två objekt för åtkomst och arbete med extern molnlagring:

  • En lagringsautentiseringsuppgift innehåller en autentiseringsmetod för åtkomst till en molnlagringsplats. Lagringsautentiseringsuppgifterna innehåller inte någon mappning till den sökväg som den ger åtkomst till. Lagringsautentiseringsuppgifterna är åtkomstkontrollerade för att avgöra vilka användare som kan använda autentiseringsuppgifterna.
  • En extern plats mappar en lagringsautentiseringsuppgift med en molnlagringssökväg som den ger åtkomst till. Den externa platsen ger endast åtkomst till den molnlagringssökvägen och dess innehåll. Externa platser är åtkomststyrda för att avgöra vilka användare som kan använda dem. En extern plats används automatiskt när SQL-kommandot innehåller en LOCATION sats.

Krav

Om du vill skapa en extern tabell måste du ha:

  • Behörigheten CREATE EXTERNAL TABLE på en extern plats som ger åtkomst till den LOCATION som nås av den externa tabellen.
  • Behörigheten USE SCHEMA för tabellens överordnade schema.
  • Behörigheten USE CATALOG för tabellens överordnade katalog.
  • Behörigheten CREATE TABLE för tabellens överordnade schema.

Externa platser och autentiseringsuppgifter för lagring lagras på metaarkivnivå i stället för i en katalog. Om du vill skapa en lagringsautentiseringsuppgift måste du vara kontoadministratör eller ha behörigheten CREATE STORAGE CREDENTIAL . Om du vill skapa en extern plats måste du vara metaarkivadministratör eller ha behörigheten CREATE EXTERNAL LOCATION . Se Anslut till molnobjektlagring med hjälp av Unity Catalog.

Skapa en tabell

Använd något av följande kommandoexempel i en notebook-fil eller SQL-frågeredigeraren för att skapa en extern tabell.

Du kan också använda en exempelanteckningsbok för att skapa lagringsautentiseringsuppgifter, extern plats och extern tabell och även hantera behörigheter för dem.

I följande exempel ersätter du platshållarvärdena:

  • <catalog>: Namnet på katalogen som ska innehålla tabellen.

    Det kan inte vara katalogen hive_metastore som skapas automatiskt för Hive-metaarkivet som är associerat med din Azure Databricks-arbetsyta. Du kan släppa katalognamnet om du skapar tabellen i arbetsytans standardkatalog.

  • <schema>: Namnet på schemat som ska innehålla tabellen.

  • <table-name>: Ett namn på tabellen.

  • <column-specification>: Namn och datatyp för varje kolumn.

  • <bucket-path>: Sökvägen till molnlagrings bucketen där tabellen ska skapas.

  • <table-directory>: En katalog där tabellen ska skapas. Använd en unik katalog för varje tabell.

Viktigt!

När en tabell har skapats i en sökväg kan användarna inte längre komma åt filerna direkt i den sökvägen från Azure Databricks även om de har fått behörighet på en extern plats eller lagringsautentiseringsuppgifter för att göra det. Detta för att säkerställa att användarna inte kan kringgå åtkomstkontroller som tillämpas på tabeller genom att läsa filer direkt från din molnklientorganisation.

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 kontrollerar att du har följande behörigheter:

  • CREATE EXTERNAL TABLE på den externa plats som refererar till den molnlagringssökväg som du anger.
  • CREATE TABLE i det överordnade schemat.
  • USE SCHEMA i det överordnade schemat.
  • USE CATALOG i den överordnade katalogen.

Om du gör det skapas den externa tabellen. Annars uppstår ett fel och den externa tabellen skapas inte.

Kommentar

Du kan i stället migrera en befintlig extern tabell i Hive-metaarkivet till Unity Catalog utan att duplicera dess data. Se Uppgradera en enda Hive-tabell till en extern Unity Catalog-tabell med hjälp av uppgraderingsguiden.

Du kan också skapa en extern tabell med hjälp av Databricks Terraform-providern och databricks_table. Du kan hämta en lista med fullständiga tabellnamn med hjälp av databricks_tables.

Exempel på notebook-fil: Skapa externa tabeller

Du kan använda följande notebook-exempel för att skapa en katalog, ett schema och en extern tabell och för att hantera behörigheter för dem.

Skapa och hantera en extern tabell i Notebook-filen för Unity Catalog

Hämta notebook-fil

Skapa en tabell från filer som lagras i din molnklientorganisation

Du kan fylla i en hanterad eller extern tabell med poster från filer som lagras i molnklientorganisationen. Unity Catalog läser filerna på den platsen och infogar innehållet i tabellen. I Unity Catalog kallas detta sökvägsbaserad åtkomst.

Du kan följa exemplen i det här avsnittet eller använda användargränssnittet för att lägga till data.

Utforska innehållet i filerna

Om du vill utforska data som lagras på en extern plats innan du skapar tabeller från dessa data kan du använda Catalog Explorer eller följande kommandon.

Behörigheter som krävs: Du måste ha behörigheten READ FILES på den externa plats som är associerad med molnlagringssökvägen för att returnera en lista över datafiler på den platsen.

SQL

  1. Visa en lista över filerna i en molnlagringssökväg:

    LIST 'abfss://<path-to-files>';
    
  2. Fråga efter data i filerna i en viss sökväg:

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

Python

  1. Visa en lista över filerna i en molnlagringssökväg:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. Fråga efter data i filerna i en viss sökväg:

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

R

  1. Visa en lista över filerna i en molnlagringssökväg:

    library(SparkR)
    
    display(sql("LIST 'abfss://<path-to-files>'"))
    
  2. Fråga efter data i filerna i en viss sökväg:

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

Scala

  1. Visa en lista över filerna i en molnlagringssökväg:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. Fråga efter data i filerna i en viss sökväg:

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

Skapa en tabell från filerna

Följ exemplen i det här avsnittet för att skapa en ny tabell och fylla den med datafiler i din molnklientorganisation.

Kommentar

Du kan i stället migrera en befintlig extern tabell i Hive-metaarkivet till Unity Catalog utan att duplicera dess data. Se Uppgradera en enda Hive-tabell till en extern Unity Catalog-tabell med hjälp av uppgraderingsguiden.

Viktigt!

  • När du skapar en tabell med den här metoden skrivs lagringssökvägen bara en gång för att förhindra duplicering av poster. Om du vill läsa om innehållet i katalogen måste du släppa och återskapa tabellen. För en befintlig tabell kan du infoga poster från en lagringssökväg.
  • Bucketsökvägen där du skapar en tabell kan inte heller användas för att läsa eller skriva datafiler.
  • Endast filerna i den exakta katalogen är lästa. läsningen är inte rekursiv.
  • Du måste ha följande behörigheter:
    • USE CATALOG i den överordnade katalogen och USE SCHEMA i schemat.
    • CREATE TABLE i det överordnade schemat.
    • READ FILES på den externa plats som är associerad med bucketsökvägen där filerna finns, eller direkt på lagringsautentiseringsuppgifterna om du inte använder en extern plats.
    • Om du skapar en extern tabell behöver CREATE EXTERNAL TABLE du på bucketsökvägen där tabellen ska skapas.

Om du vill skapa en ny hanterad tabell och fylla den med data i molnlagringen använder du följande exempel.

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

Om du vill skapa en extern tabell och fylla den med data i molnlagringen lägger du till en LOCATION sats:

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

Infoga poster från en sökväg i en befintlig tabell

Om du vill infoga poster från en bucketsökväg i en befintlig tabell använder du COPY INTO kommandot . I följande exempel ersätter du platshållarvärdena:

  • <catalog>: Namnet på tabellens överordnade katalog.
  • <schema>: Namnet på tabellens överordnade schema.
  • <path-to-files>: Bucketsökvägen som innehåller datafilerna.
  • <format>: Formatet på filerna, till exempel delta.
  • <table-location>: Bucketsökvägen där tabellen ska skapas.

Viktigt!

  • När du infogar poster i en tabell med den här metoden är bucketsökvägen du anger skrivskyddad en gång för att förhindra duplicering av poster.
  • Bucketsökvägen där du skapar en tabell kan inte heller användas för att läsa eller skriva datafiler.
  • Endast filerna i den exakta katalogen är lästa. läsningen är inte rekursiv.
  • Du måste ha följande behörigheter:
    • USE CATALOG i den överordnade katalogen och USE SCHEMA i schemat.
    • MODIFY på tabellen.
    • READ FILES på den externa plats som är associerad med bucketsökvägen där filerna finns, eller direkt på lagringsautentiseringsuppgifterna om du inte använder en extern plats.
    • Om du vill infoga poster i en extern tabell behöver CREATE EXTERNAL TABLE du på bucketsökvägen där tabellen finns.

Om du vill infoga poster från filer i en bucketsökväg i en hanterad tabell använder du en extern plats för att läsa från bucketsökvägen:

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

Om du vill infoga i en extern tabell lägger du till en LOCATION sats:

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

Lägga till kommentarer i en tabell

Som tabellägare eller användare med behörigheten MODIFY i en tabell kan du lägga till kommentarer i en tabell och dess kolumner. Du kan lägga till kommentarer med hjälp av följande funktioner:

  • KOMMANDOT KOMMENTERA. Det här alternativet stöder inte kolumnkommentare.
  • Alternativet COMMENT när du använder kommandona CREATE TABLE och ALTER TABLE . Det här alternativet stöder kolumnkommentare.
  • Fältet "manuell" kommentar i Katalogutforskaren. Det här alternativet stöder kolumnkommentare. Se Dokumentdata i Katalogutforskaren med markdown-kommentarer.
  • AI-genererade kommentarer (kallas även AI-genererad dokumentation) i Catalog Explorer. Du kan visa en kommentar som föreslås av en stor språkmodell (LLM) som tar hänsyn till tabellmetadata, till exempel tabellschemat och kolumnnamnen, och redigera eller acceptera kommentaren som den är för att lägga till den. Se Lägga till AI-genererade kommentarer i en tabell.

Nästa steg