Vytváření tabulek v katalogu Unity

Tento článek představuje koncept spravovaných a externích tabulek v katalogu Unity a popisuje, jak vytvářet tabulky v katalogu Unity.

Poznámka:

Při vytváření tabulky nezapomeňte odkazovat na katalog, který se řídí katalogem Unity, nebo nastavit výchozí katalog na katalog, který se řídí katalogem Unity. Viz Správa výchozího katalogu.

Katalog hive_metastore se zobrazí v Průzkumníku katalogu, ale není považován za řízený katalogem Unity. Spravuje ho metastore Hive vašeho pracovního prostoru Azure Databricks. Všechny ostatní uvedené katalogy se řídí katalogem Unity.

K upgradu existujících tabulek zaregistrovaných v metastoru Hive na Katalog Unity můžete použít rozhraní upgradu tabulky Katalogu Unity. Viz Upgrade tabulek a zobrazení Hive na katalog Unity.

Spravované tabulky

Spravované tabulky představují výchozí způsob vytváření tabulek v katalogu Unity. Katalog Unity spravuje životní cyklus a rozložení souborů pro tyto tabulky. K přímé manipulaci se soubory v těchto tabulkách byste neměli používat nástroje mimo Azure Databricks.

Spravované tabulky se ukládají ve spravovaném úložišti, a to buď na úrovni metastoru, katalogu nebo schématu, v závislosti na konfiguraci schématu a katalogu. Viz Určení spravovaného umístění úložiště v katalogu Unity.

Spravované tabulky vždy používají formát tabulky Delta .

Když dojde k vyřazení spravované tabulky, její podkladová data se ze svého cloudového tenanta odstraní do 30 dnů.

Externí tabulky

Externí tabulky jsou tabulky, jejichž data jsou uložená mimo umístění spravovaného úložiště určeného pro metastor, katalog nebo schéma. Externí tabulky používejte jenom v případech, kdy potřebujete přímý přístup k datům mimo clustery Azure Databricks nebo datové sklady SQL Databricks.

Při spuštění DROP TABLE na externí tabulce katalog Unity neodstraní podkladová data. Pokud chcete tabulku odstranit, musíte být jejím vlastníkem. Oprávnění k externím tabulkám můžete spravovat a používat je v dotazech stejným způsobem jako spravované tabulky. Pokud chcete vytvořit externí tabulku s SQL, zadejte LOCATION v CREATE TABLE příkazu cestu. Externí tabulky můžou používat následující formáty souborů:

  • DELTA
  • CSV
  • JSON
  • AVRO
  • PARKETOVÉ
  • ORC
  • TEXT

Pokud chcete spravovat přístup k podkladovému cloudovému úložišti pro externí tabulku, musíte nastavit přihlašovací údaje úložiště a externí umístění.

Další informace najdete v tématu Vytvoření externí tabulky.

Požadavky

Musíte mít CREATE TABLE oprávnění ke schématu, ve kterém chcete vytvořit tabulku, a také USE SCHEMA oprávnění ke schématu a USE CATALOG oprávnění nadřazeného katalogu.

Pokud vytváříte externí tabulku, přečtěte si téma Vytvoření externí tabulky pro další požadavky.

Vytvoření spravované tabulky

Pokud chcete vytvořit spravovanou tabulku, spusťte následující příkaz SQL. Položky v závorkách jsou volitelné. Nahraďte zástupné hodnoty:

  • <catalog-name>: Název katalogu, který bude obsahovat tabulku.

    Nejde o hive_metastore katalog, který se vytvoří automaticky pro metastor Hive přidružený k vašemu pracovnímu prostoru Azure Databricks. Název katalogu můžete odstranit, pokud vytváříte tabulku ve výchozím katalogu pracovního prostoru.

  • <schema-name>: Název schématu, který bude obsahovat tabulku..

  • <table-name>: Název tabulky.

  • <column-specification>: Název a datový typ pro každý sloupec.

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

Spravovanou tabulku můžete vytvořit také pomocí zprostředkovatele Databricks Terraform a databricks_table. Seznam celých jmen tabulky můžete načíst pomocí databricks_tables.

Pokud chcete například vytvořit tabulku main.default.department a vložit do ní pět řádků:

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

Vyřazení spravované tabulky

Pokud chcete tabulku odstranit, musíte být vlastníkem tabulky. Pokud chcete odstranit spravovanou tabulku, spusťte následující příkaz SQL:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Když dojde k vyřazení spravované tabulky, její podkladová data se ze svého cloudového tenanta odstraní do 30 dnů.

Vytvoření externí tabulky

Data v externí tabulce jsou uložená v cestě vašeho cloudového tenanta. Pro práci s externími tabulkami představuje Katalog Unity dva objekty pro přístup k externímu cloudovému úložišti a práci s nimi:

  • Přihlašovací údaje úložiště obsahují metodu ověřování pro přístup k umístění cloudového úložiště. Přihlašovací údaje úložiště neobsahují mapování na cestu, ke které uděluje přístup. Přihlašovací údaje k úložišti jsou řízeny přístupem a určují, kteří uživatelé můžou přihlašovací údaje používat.
  • Externí umístění mapuje přihlašovací údaje úložiště s cestou cloudového úložiště, ke které uděluje přístup. Externí umístění uděluje přístup pouze k této cestě cloudového úložiště a jeho obsahu. Externí umístění jsou řízená přístupem a určují, kteří uživatelé je můžou používat. Externí umístění se použije automaticky, když příkaz SQL obsahuje LOCATION klauzuli.

Požadavky

Pokud chcete vytvořit externí tabulku, musíte mít:

  • Oprávnění CREATE EXTERNAL TABLE k externímu umístění, které uděluje přístup k LOCATION přístupové tabulce.
  • Oprávnění USE SCHEMA nadřazeného schématu tabulky.
  • Oprávnění USE CATALOG k nadřazenému katalogu tabulky.
  • Oprávnění CREATE TABLE nadřazeného schématu tabulky.

Externí umístění a přihlašovací údaje k úložišti se ukládají na úrovni metastoru, nikoli v katalogu. Pokud chcete vytvořit přihlašovací údaje úložiště, musíte být správcem účtu nebo mít oprávnění CREATE STORAGE CREDENTIAL . Pokud chcete vytvořit externí umístění, musíte být správcem metastoru CREATE EXTERNAL LOCATION nebo mít oprávnění. Viz Připojení do cloudového úložiště objektů pomocí katalogu Unity.

Vytvoření tabulky

K vytvoření externí tabulky použijte jeden z následujících příkladů příkazů v poznámkovém bloku nebo editoru dotazů SQL.

Ukázkový poznámkový blok můžete použít také k vytvoření přihlašovacích údajů úložiště, externího umístění a externí tabulky a také ke správě oprávnění.

V následujících příkladech nahraďte zástupné hodnoty:

  • <catalog>: Název katalogu, který bude obsahovat tabulku.

    Nejde o hive_metastore katalog, který se vytvoří automaticky pro metastor Hive přidružený k vašemu pracovnímu prostoru Azure Databricks. Název katalogu můžete odstranit, pokud vytváříte tabulku ve výchozím katalogu pracovního prostoru.

  • <schema>: Název schématu, které bude obsahovat tabulku.

  • <table-name>: Název tabulky.

  • <column-specification>: Název a datový typ pro každý sloupec.

  • <bucket-path>: Cesta k kontejneru cloudového úložiště, kde se tabulka vytvoří.

  • <table-directory>: Adresář, ve kterém se vytvoří tabulka. Pro každou tabulku použijte jedinečný adresář.

Důležité

Po vytvoření tabulky v cestě už uživatelé nebudou mít přímý přístup k souborům v této cestě z Azure Databricks, i když jim byla udělena oprávnění k externímu umístění nebo přihlašovacím údajům úložiště. Tím zajistíte, aby uživatelé nemohli obcházet řízení přístupu použité u tabulek čtením souborů z cloudového tenanta přímo.

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

Katalog Unity kontroluje, jestli máte následující oprávnění:

  • CREATE EXTERNAL TABLE na externím umístění, které odkazuje na zadaná cesta cloudového úložiště.
  • CREATE TABLE v nadřazené schématu.
  • USE SCHEMA v nadřazené schématu.
  • USE CATALOG v nadřazené katalogu.

Pokud to uděláte, vytvoří se externí tabulka. V opačném případě dojde k chybě a externí tabulka se nevytvořila.

Poznámka:

Místo toho můžete migrovat existující externí tabulku v metastoru Hive do katalogu Unity bez duplikování dat. Viz Upgrade jedné tabulky Hive na externí tabulku Katalogu Unity pomocí průvodce upgradem.

Externí tabulku můžete vytvořit také pomocí zprostředkovatele Databricks Terraform a databricks_table. Seznam celých jmen tabulky můžete načíst pomocí databricks_tables.

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

Získat poznámkový blok

Vytvoření tabulky ze souborů uložených v cloudovém tenantovi

Spravovanou nebo externí tabulku můžete naplnit záznamy ze souborů uložených ve vašem cloudovém tenantovi. Katalog Unity čte soubory v daném umístění a vloží jejich obsah do tabulky. V katalogu Unity se tomu říká přístup založený na cestě.

Můžete postupovat podle příkladůvchch

Prozkoumání obsahu souborů

Pokud chcete prozkoumat data uložená v externím umístění před vytvořením tabulek z těchto dat, můžete použít Průzkumníka katalogu nebo následující příkazy.

Požadovaná oprávnění: K vrácení seznamu datových souborů v tomto umístění musíte mít READ FILES oprávnění k externímu umístění přidruženému k cestě cloudového úložiště.

Sql

  1. Výpis souborů v cestě cloudového úložiště:

    LIST 'abfss://<path-to-files>';
    
  2. Dotazujte se na data v souborech v dané cestě:

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

Python

  1. Výpis souborů v cestě cloudového úložiště:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. Dotazujte se na data v souborech v dané cestě:

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

R

  1. Výpis souborů v cestě cloudového úložiště:

    library(SparkR)
    
    display(sql("LIST 'abfss://<path-to-files>'"))
    
  2. Dotazujte se na data v souborech v dané cestě:

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

Scala

  1. Výpis souborů v cestě cloudového úložiště:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. Dotazujte se na data v souborech v dané cestě:

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

Vytvoření tabulky ze souborů

Postupujte podle příkladů v této části a vytvořte novou tabulku a naplňte ji datovými soubory ve vašem cloudovém tenantovi.

Poznámka:

Místo toho můžete migrovat existující externí tabulku v metastoru Hive do katalogu Unity bez duplikování dat. Viz Upgrade jedné tabulky Hive na externí tabulku Katalogu Unity pomocí průvodce upgradem.

Důležité

  • Při vytváření tabulky pomocí této metody se cesta k úložišti čte jen jednou, aby se zabránilo duplikování záznamů. Pokud chcete znovu přečíst obsah adresáře, musíte tabulku odstranit a znovu vytvořit. U existující tabulky můžete vložit záznamy z cesty k úložišti.
  • Cestu kontejneru, ve které vytvoříte tabulku, nelze použít také ke čtení nebo zápisu datových souborů.
  • Jen soubory v přesném adresáři jsou přečtené; čtení není rekurzivní.
  • Musíte mít následující oprávnění:
    • USE CATALOG v nadřazeného katalogu a USE SCHEMA ve schématu.
    • CREATE TABLE v nadřazené schématu.
    • READ FILES v externím umístění přidruženém k cestě kontejneru, kde se soubory nacházejí, nebo přímo na přihlašovacích údajích úložiště, pokud nepoužíváte externí umístění.
    • Pokud vytváříte externí tabulku, potřebujete CREATE EXTERNAL TABLE cestu kontejneru, ve které se tabulka vytvoří.

Pokud chcete vytvořit novou spravovanou tabulku a naplnit ji daty v cloudovém úložišti, použijte následující příklady.

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

Pokud chcete vytvořit externí tabulku a naplnit ji daty v cloudovém úložišti, přidejte klauzuli LOCATION :

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

Vložení záznamů z cesty do existující tabulky

Pokud chcete vložit záznamy z cesty kbelíku do existující tabulky, použijte COPY INTO příkaz. V následujících příkladech nahraďte zástupné hodnoty:

  • <catalog>: Název nadřazeného katalogu tabulky.
  • <schema>: Název nadřazeného schématu tabulky.
  • <path-to-files>: Cesta kontejneru, která obsahuje datové soubory.
  • <format>: Formát souborů, například delta.
  • <table-location>: Cesta kontejneru, ve které se vytvoří tabulka.

Důležité

  • Při vkládání záznamů do tabulky pomocí této metody je cesta kontejneru, kterou zadáte, jen jednou pro čtení, aby se zabránilo duplikaci záznamů.
  • Cestu kontejneru, ve které vytvoříte tabulku, nelze použít také ke čtení nebo zápisu datových souborů.
  • Jen soubory v přesném adresáři jsou přečtené; čtení není rekurzivní.
  • Musíte mít následující oprávnění:
    • USE CATALOG v nadřazeného katalogu a USE SCHEMA ve schématu.
    • MODIFY v tabulce.
    • READ FILES v externím umístění přidruženém k cestě kontejneru, kde se soubory nacházejí, nebo přímo na přihlašovacích údajích úložiště, pokud nepoužíváte externí umístění.
    • Pokud chcete vložit záznamy do externí tabulky, potřebujete CREATE EXTERNAL TABLE cestu kontejneru, kde se tabulka nachází.

Pokud chcete do spravované tabulky vložit záznamy ze souborů v cestě kontejneru, použijte externí umístění ke čtení z cesty kontejneru:

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

Pokud chcete vložit do externí tabulky, přidejte klauzuli LOCATION :

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

Přidání komentářů do tabulky

Jako vlastník tabulky nebo uživatel s MODIFY oprávněním k tabulce můžete přidávat komentáře do tabulky a jejích sloupců. Komentáře můžete přidat pomocí následujících funkcí:

Další kroky