Skapa deltatabeller

Slutförd

När du skapar en tabell i ett Microsoft Fabric-sjöhus definieras en deltatabell i metaarkivet för lakehouse och data för tabellen lagras i de underliggande Parquet-filerna för tabellen.

Med de flesta interaktiva verktygen i Microsoft Fabric-miljön abstraheras informationen om att mappa tabelldefinitionen i metaarkivet till de underliggande filerna. Men när du arbetar med Apache Spark i ett sjöhus har du större kontroll över skapandet och hanteringen av deltatabeller.

Skapa en deltatabell från en dataram

Ett av de enklaste sätten att skapa en deltatabell i Spark är att spara en dataram i deltaformatet . Följande PySpark-kod läser till exempel in en dataram med data från en befintlig fil och sparar sedan dataramen som en deltatabell:

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

Koden anger att tabellen ska sparas i deltaformat med ett angivet tabellnamn. Data för tabellen sparas i Parquet-filer (oavsett formatet på källfilen som du läste in i dataramen) i lagringsområdet Tabeller i lakehouse, tillsammans med en _delta_log mapp som innehåller transaktionsloggarna för tabellen. Tabellen visas i mappen Tabeller för lakehouse i fönstret Datautforskaren .

Hanterade eller externa tabeller

I föregående exempel sparades dataramen som en hanterad tabell, vilket innebär att tabelldefinitionen i metaarkivet och de underliggande datafilerna båda hanteras av Spark-körningen för Fabric Lakehouse. Om du tar bort tabellen tas även de underliggande filerna bort från lagringsplatsen Tabeller för lakehouse.

Du kan också skapa tabeller som externa tabeller, där relationstabelldefinitionen i metaarkivet mappas till en alternativ fillagringsplats. Följande kod skapar till exempel en extern tabell för vilken data lagras i mappen på lagringsplatsen Filer för lakehouse:

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

I det här exemplet skapas tabelldefinitionen i metaarkivet (så tabellen visas i användargränssnittet Tabeller för lakehouse), men Parquet-datafilerna och JSON-loggfilerna för tabellen lagras på lagringsplatsen Filer (och visas i noden Filer i fönstret Lakehouse Explorer ).

Du kan också ange en fullständigt kvalificerad sökväg för en lagringsplats, så här:

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

Om du tar bort en extern tabell från lakehouse-metaarkivet tas inte de associerade datafilerna bort.

Skapa tabellmetadata

Det är vanligt att skapa en tabell från befintliga data i en dataram, men det finns ofta scenarier där du vill skapa en tabelldefinition i metaarkivet som fylls med data på andra sätt. Det finns flera sätt att uppnå det här målet på.

Använda DeltaTableBuilder-API:et

Med DeltaTableBuilder-API:et kan du skriva Spark-kod för att skapa en tabell baserat på dina specifikationer. Följande kod skapar till exempel en tabell med ett angivet namn och kolumner.

from delta.tables import *

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

Använda Spark SQL

Du kan också skapa deltatabeller med hjälp av Spark SQL-instruktionen CREATE TABLE , som du ser i det här exemplet:

%%sql

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

I föregående exempel skapas en hanterad tabell. Du kan också skapa en extern tabell genom att ange en LOCATION parameter, som du ser här:

%%sql

CREATE TABLE MyExternalTable
USING DELTA
LOCATION 'Files/mydata'

När du skapar en extern tabell bestäms schemat för tabellen av Parquet-filerna som innehåller data på den angivna platsen. Den här metoden kan vara användbar när du vill skapa en tabelldefinition som refererar till data som redan har sparats i deltaformat eller baserat på en mapp där du förväntar dig att mata in data i deltaformat.

Spara data i deltaformat

Hittills har du sett hur du sparar en dataram som en deltatabell (skapar både tabellschemadefinitionen i metaarkivet och datafilerna i deltaformat) och hur du skapar tabelldefinitionen (som skapar tabellschemat i metaarkivet utan att spara några datafiler). En tredje möjlighet är att spara data i deltaformat utan att skapa en tabelldefinition i metaarkivet. Den här metoden kan vara användbar när du vill spara resultatet av datatransformeringar som utförs i Spark i ett filformat som du senare kan "lägga över" en tabelldefinition eller process direkt med hjälp av Delta Lake-API:et.

Följande PySpark-kod sparar till exempel en dataram till en ny mappplats i deltaformat :

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

Deltafiler sparas i Parquet-format i den angivna sökvägen och innehåller en _delta_log mapp som innehåller transaktionsloggfiler. Transaktionsloggar registrerar eventuella ändringar i data, till exempel uppdateringar som görs i externa tabeller eller via Delta Lake-API:et.

Du kan ersätta innehållet i en befintlig mapp med data i en dataram med hjälp av överskrivningsläget , som du ser här:

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

Du kan också lägga till rader från en dataram i en befintlig mapp med hjälp av tilläggsläget :

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

Dricks

Om du använder den teknik som beskrivs här för att spara en dataram på platsen Tabeller i lakehouse använder Microsoft Fabric en automatisk tabellidentifieringsfunktion för att skapa motsvarande tabellmetadata i metaarkivet.