Vytvoření tabulek delta

Dokončeno

Když vytvoříte tabulku v Microsoft Fabric Lakehouse, v metastoru pro lakehouse se definuje rozdílová tabulka a data tabulky jsou uložená v podkladových souborech Parquet tabulky.

U většiny interaktivních nástrojů v prostředí Microsoft Fabric jsou podrobnosti mapování definice tabulky v metastoru na podkladové soubory abstrahovány. Při práci s Apache Sparkem v jezeře ale máte větší kontrolu nad vytvářením a správou tabulek Delta.

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

Jedním z nejjednodušších způsobů, jak ve Sparku vytvořit rozdílovou tabulku, je uložit datový rámec ve formátu delta . Například následující kód PySpark načte datový rámec s daty z existujícího souboru a pak tento datový rámec uloží jako rozdílovou tabulku:

# Load a file into a dataframe
df = spark.read.load('Files/mydata.csv', format='csv', header=True)

# Save the dataframe as a delta table
df.write.format("delta").saveAsTable("mytable")

Kód určuje, že tabulka by měla být uložena v rozdílovém formátu se zadaným názvem tabulky. Data tabulky jsou uložena v souborech Parquet (bez ohledu na formát zdrojového souboru, který jste načetli do datového rámce) v oblasti Úložiště tabulek v jezeře společně se složkou _delta_log obsahující transakční protokoly tabulky. Tabulka je uvedená ve složce Tabulky pro lakehouse v podokně Průzkumník dat.

Spravované a externí tabulky

V předchozím příkladu byl datový rámec uložen jako spravovaná tabulka, což znamená, že definici tabulky v metastoru a podkladových datových souborů spravuje modul runtime Spark pro Fabric Lakehouse. Odstraněním tabulky odstraníte také podkladové soubory z umístění Úložiště tabulek pro lakehouse.

Můžete také vytvořit tabulky jako externí tabulky, ve kterých je definice relační tabulky v metastoru namapovaná na alternativní umístění úložiště souborů. Následující kód například vytvoří externí tabulku, pro kterou jsou data uložená ve složce v umístění Úložiště souborů pro jezero:

df.write.format("delta").saveAsTable("myexternaltable", path="Files/myexternaltable")

V tomto příkladu se definice tabulky vytvoří v metastoru (takže je tabulka uvedená v uživatelském rozhraní Tabulky pro lakehouse), ale datové soubory Parquet a soubory protokolu JSON pro tabulku jsou uloženy v umístění úložiště Soubory (a zobrazí se v uzlu Soubory v podokně Průzkumník Lakehouse).

Můžete také zadat plně kvalifikovanou cestu pro umístění úložiště, například takto:

df.write.format("delta").saveAsTable("myexternaltable", path="abfss://my_store_url..../myexternaltable")

Odstranění externí tabulky z metastoru lakehouse neodstraní přidružené datové soubory.

Vytváření metadat tabulky

I když je běžné vytvořit tabulku z existujících dat v datovém rámci, často existují scénáře, kdy chcete v metastoru vytvořit definici tabulky, která se naplní daty jinými způsoby. Tento cíl můžete dosáhnout několika způsoby.

Použití rozhraní DeltaTableBuilder API

Rozhraní DeltaTableBuilder API umožňuje psát kód Sparku pro vytvoření tabulky na základě vašich specifikací. Například následující kód vytvoří tabulku se zadaným názvem a sloupci.

from delta.tables import *

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

Použití Spark SQL

Rozdílové tabulky můžete vytvořit také pomocí příkazu Spark SQL CREATE TABLE , jak je znázorněno v tomto příkladu:

%%sql

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

Předchozí příklad vytvoří spravovanou tabulku. Externí tabulku můžete vytvořit také zadáním parametru LOCATION , jak je znázorněno tady:

%%sql

CREATE TABLE MyExternalTable
USING DELTA
LOCATION 'Files/mydata'

Při vytváření externí tabulky je schéma tabulky určeno soubory Parquet obsahující data v zadaném umístění. Tento přístup může být užitečný, když chcete vytvořit definici tabulky, která odkazuje na data, která již byla uložena v rozdílovém formátu, nebo na základě složky, ve které očekáváte příjem dat v rozdílovém formátu.

Ukládání dat ve formátu delta

Zatím jste viděli, jak uložit datový rámec jako rozdílovou tabulku (vytvoření definice schématu tabulky v metastoru i datových souborů v rozdílovém formátu) a jak vytvořit definici tabulky (která vytvoří schéma tabulky v metastoru bez uložení datových souborů). Třetí možností je uložit data v rozdílovém formátu bez vytvoření definice tabulky v metastoru. Tento přístup může být užitečný v případě, že chcete zachovat výsledky transformací dat provedených ve Sparku ve formátu souboru, ve kterém můžete později definici tabulky nebo proces překrýt přímo pomocí rozhraní Delta Lake API.

Například následující kód PySpark uloží datový rámec do nového umístění složky v rozdílovém formátu:

delta_path = "Files/mydatatable"
df.write.format("delta").save(delta_path)

Rozdílové soubory jsou uloženy ve formátu Parquet v zadané cestě a obsahují složku _delta_log obsahující soubory transakčních protokolů. Transakční protokoly zaznamenávají všechny změny dat, jako jsou aktualizace externích tabulek nebo prostřednictvím rozhraní Delta Lake API.

Obsah existující složky můžete nahradit daty v datovém rámci pomocí režimu přepsání , jak je znázorněno tady:

new_df.write.format("delta").mode("overwrite").save(delta_path)

Řádky z datového rámce můžete také přidat do existující složky pomocí režimu připojení :

new_rows_df.write.format("delta").mode("append").save(delta_path)

Tip

Pokud použijete techniku popsanou zde k uložení datového rámce do umístění Tabulky v jezeře, Microsoft Fabric použije funkci automatického zjišťování tabulek k vytvoření odpovídajících metadat tabulky v metastoru.