Skapa deltatabeller
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.