Vytvoření tabulek katalogu

Dokončeno

Zatím jsme zvážili instance tabulek Delta Lake vytvořené z datových rámců a upravili jsme je prostřednictvím rozhraní Delta Lake API. Tabulky Delta Lake můžete také definovat jako tabulky katalogu v metastoru Hive pro váš fond Sparku a pracovat s nimi pomocí SQL.

Externí a spravované tabulky

Tabulky v katalogu Spark, včetně tabulek Delta Lake, je možné spravovat nebo externí. Je důležité pochopit rozdíl mezi těmito druhy tabulek.

  • Spravovaná tabulka je definována bez zadaného umístění a datové soubory jsou uloženy v úložišti používaném metastorem. Vyřazení tabulky nejen odebere metadata z katalogu, ale také odstraní složku, ve které jsou uloženy jeho datové soubory.
  • Externí tabulka je definována pro vlastní umístění souboru, kde jsou uložena data tabulky. Metadata tabulky jsou definována v katalogu Spark. Vyřazení tabulky odstraní metadata z katalogu, ale nemá vliv na datové soubory.

Vytváření tabulek katalogu

Existuje několik způsobů, jak vytvořit tabulky katalogu.

Vytvoření tabulky katalogu z datového rámce

Spravované tabulky můžete vytvořit zápisem datového rámce pomocí saveAsTable operace, jak je znázorněno v následujících příkladech:

# Save a dataframe as a managed table
df.write.format("delta").saveAsTable("MyManagedTable")

## specify a path option to save as an external table
df.write.format("delta").option("path", "/mydata").saveAsTable("MyExternalTable")

Vytvoření tabulky katalogu pomocí SQL

Tabulku katalogu můžete vytvořit také pomocí CREATE TABLE příkazu SQL s USING DELTA klauzulí a volitelného LOCATION parametru pro externí tabulky. Příkaz můžete spustit pomocí rozhraní SparkSQL API, například v následujícím příkladu:

spark.sql("CREATE TABLE MyExternalTable USING DELTA LOCATION '/mydata'")

Případně můžete ke spuštění příkazu použít nativní podporu SQL ve Sparku:

%%sql

CREATE TABLE MyExternalTable
USING DELTA
LOCATION '/mydata'

Tip

Příkaz CREATE TABLE vrátí chybu, pokud tabulka se zadaným názvem již v katalogu existuje. Pokud chcete toto chování zmírnit, můžete použít CREATE TABLE IF NOT EXISTS příkaz nebo CREATE OR REPLACE TABLE příkaz.

Definování schématu tabulky

Ve všech dosud uvedených příkladech se tabulka vytvoří bez explicitního schématu. V případě tabulek vytvořených zápisem datového rámce se schéma tabulky dědí z datového rámce. Při vytváření externí tabulky je schéma zděděno ze všech souborů, které jsou aktuálně uloženy v umístění tabulky. Při vytváření nové spravované tabulky nebo externí tabulky s aktuálně prázdným umístěním však definujete schéma tabulky zadáním názvů sloupců, typů a nullability v rámci příkazu CREATE TABLE; jak je znázorněno v následujícím příkladu:

%%sql

CREATE TABLE ManagedSalesOrders
(
    Orderid INT NOT NULL,
    OrderDate TIMESTAMP NOT NULL,
    CustomerName STRING,
    SalesTotal FLOAT NOT NULL
)
USING DELTA

Při použití Delta Lake se vynucují schémata tabulek – všechna vložení a aktualizace musí splňovat zadanou hodnotu null sloupce a datové typy.

Použití rozhraní DeltaTableBuilder API

K vytvoření tabulky katalogu můžete použít rozhraní DeltaTableBuilder API (součást rozhraní Delta Lake API), jak je znázorněno v následujícím příkladu:

from delta.tables import *

DeltaTable.create(spark) \
  .tableName("default.ManagedProducts") \
  .addColumn("Productid", "INT") \
  .addColumn("ProductName", "STRING") \
  .addColumn("Category", "STRING") \
  .addColumn("Price", "FLOAT") \
  .execute()

Podobně jako příkaz CREATE TABLE SQL create metoda vrátí chybu, pokud tabulka se zadaným názvem již existuje. Toto chování můžete zmírnit pomocí createIfNotExists metody nebo createOrReplace metody.

Použití tabulek katalogu

Tabulky katalogu, jako jsou tabulky, můžete použít v libovolné relační databázi založené na SQL, dotazování a manipulaci s nimi pomocí standardních příkazů SQL. Následující příklad kódu například používá SELECT příkaz k dotazování na tabulku ManagedSalesOrders :

%%sql

SELECT orderid, salestotal
FROM ManagedSalesOrders

Tip

Další informace o práci s Delta Lake najdete v tématu Dávkové čtení a zápisy tabulek v dokumentaci k Delta Lake.