Dela via


Spark-koppling för Microsoft Fabric Datamagasin

Spark-anslutningsappen för Fabric Data Warehouse gör det möjligt för Spark-utvecklare och dataforskare att komma åt och arbeta med data från ett lager och SQL-analysslutpunkten för ett lakehouse. Anslutningsappen har följande funktioner:

  • Du kan arbeta med data från ett lager eller en SQL-analysslutpunkt på samma arbetsyta eller över flera arbetsytor.
  • SQL-analysslutpunkten för en Lakehouse identifieras automatiskt baserat på arbetsytekontext.
  • Anslutningsappen har ett förenklat Spark-API, abstraherar den underliggande komplexiteten och fungerar med bara en kodrad.
  • När du använder en tabell eller en vy upprätthåller anslutningsappen säkerhetsmodeller som definierats på SQL-motornivå. Dessa modeller omfattar säkerhet på objektnivå (OLS), säkerhet på radnivå (RLS) och säkerhet på kolumnnivå (CLS).
  • Anslutningsappen är förinstallerad i Fabric-körningen, vilket eliminerar behovet av separat installation.

Autentisering

Microsoft Entra-autentisering är en integrerad autentiseringsmetod. Användare loggar in på Microsoft Fabric-arbetsytan och deras autentiseringsuppgifter skickas automatiskt till SQL-motorn för autentisering och auktorisering. Autentiseringsuppgifterna mappas automatiskt och användarna behöver inte ange specifika konfigurationsalternativ.

Behörigheter

För att ansluta till SQL-motorn behöver användarna minst läsbehörighet (ungefär som CONNECT-behörighet i SQL Server) på lager- eller SQL-analysslutpunkten (objektnivå). Användarna behöver också detaljerade behörigheter på objektnivå för att läsa data från specifika tabeller eller vyer. Mer information finns i Säkerhet för datalagerhantering i Microsoft Fabric.

Kodmallar och exempel

Använda en metodsignatur

Följande kommando visar metodsignaturen synapsesql för läsbegäran. Det trefaldiga argumentet tableName krävs för åtkomst till tabeller eller vyer från ett datalager och för SQL-analysslutpunkten av ett lakehouse. Uppdatera argumentet med följande namn baserat på ditt scenario:

  • Del 1: Namn på lager eller sjöhus.
  • Del 2: Namnet på schemat.
  • Del 3: Namnet på tabellen eller vyn.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame

Förutom att läsa från en tabell eller vy direkt kan du med den här anslutningsappen även ange en anpassad fråga eller genomströmningsfråga som skickas till SQL-motorn och resultatet returneras tillbaka till Spark.

spark.read.option(Constants.DatabaseName, "<warehouse/lakeshouse name>").synapsesql("<T-SQL Query>") => org.apache.spark.sql.DataFrame

Den här anslutningsappen identifierar automatiskt slutpunkten för det angivna lagret/lakehouse, men om du vill ange den explicit kan du göra det.

//For warehouse
spark.conf.set("spark.datawarehouse.<warehouse name>.sqlendpoint", "<sql endpoint,port>")
//For lakehouse
spark.conf.set("spark.lakehouse.<lakeshouse name>.sqlendpoint", "<sql endpoint,port>")
//Read from table
spark.read.synapsesql("<warehouse/lakeshouse name>.<schema name>.<table or view name>") 

Läsa data på samma arbetsyta

Viktigt!

Kör dessa importinstruktioner i början av anteckningsboken eller innan du börjar använda anslutningsappen:

import com.microsoft.spark.fabric
from com.microsoft.spark.fabric.Constants import Constants  

Följande kod är ett exempel för att läsa data från en tabell eller vy i en Spark DataFrame:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")

Följande kod är ett exempel för att läsa data från en tabell eller vy i en Spark DataFrame med en radantalsgräns på 10:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").limit(10)

Följande kod är ett exempel för att läsa data från en tabell eller vy i en Spark DataFrame när du har tillämpat ett filter:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").filter("column name == 'value'")

Följande kod är ett exempel för att läsa data från en tabell eller vy i en Spark DataFrame endast för valda kolumner:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").select("column A", "Column B")

Läsa data över flera arbetsytor

För att komma åt och läsa data från ett datalager eller lakehouse över arbetsytor kan du ange det arbetsyte-ID där ditt datalager eller lakehouse finns, och sedan lakehouse- eller lagerobjekt-ID. Följande rad innehåller ett exempel på hur du läser data från en tabell eller vy i en Spark DataFrame från lagret eller lakehouse med angivet arbetsyte-ID och lakehouse-/lager-ID:

# For lakehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.LakehouseId, "<lakehouse item id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")

# For warehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.DatawarehouseId, "<warehouse item id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")

Kommentar

När du kör notebook-filen letar anslutningsappen som standard efter det angivna lagret eller lakehouse i arbetsytan för det lakehouse som är kopplat till notebook-filen. Om du vill referera till ett lager eller lakehouse från en annan arbetsyta anger du arbetsytans ID och lakehouse- eller lagerartikel-ID enligt ovan.

Skapa en lakehouse-tabell baserat på data från ett lager

Dessa kodrader är ett exempel för att läsa data från en tabell eller vy i en Spark DataFrame och använda dem för att skapa en lakehouse-tabell:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
df.write.format("delta").saveAsTable("<Lakehouse table name>")

Skriva en Spark-dataramsdata till en lagertabell

Den här anslutningen använder en skrivprocess i två faser till en Fabric DW-tabell. Inledningsvis placeras Spark-dataramens data i en mellanlagring, följt av att använda COPY INTO-kommandot för att införa data i Fabric DW-tabellen. Den här metoden säkerställer skalbarhet med ökande datavolym.

DataFrame-lagringslägen som stöds

Följande sparlägen stöds när du skriver källdata från en dataframe till en måltabell i datalagret:

  • ErrorIfExists (standardläge för att spara): Om måltabellen finns avbryts skrivning, och ett undantag returneras till den som anropar. Annars skapas en ny tabell med data.
  • Ignorera: Om måltabellen finns, kommer skrivningen att ignorera skrivbegäran utan att returnera ett fel. Annars skapas en ny tabell med data.
  • Skriv över: Om måltabellen finns ersätts befintliga data i målet med data. Annars skapas en ny tabell med data.
  • Tillägg: Om måltabellen finns läggs de nya data till. Annars skapas en ny tabell med data.

Följande kod visar exempel på hur du skriver Spark-dataramens data till en Fabric DW-tabell:

df.write.synapsesql("<warehouse/lakehouse name>.<schema name>.<table name>") # this uses default mode - errorifexists

df.write.mode("errorifexists").synapsesql("<warehouse/lakehouse name>.<schema name>.<table name>")
df.write.mode("ignore").synapsesql("<warehouse/lakehouse name>.<schema name>.<table name>")
df.write.mode("append").synapsesql("<warehouse/lakehouse name>.<schema name>.<table name>")
df.write.mode("overwrite").synapsesql("<warehouse/lakehouse name>.<schema name>.<table name>")

Kommentar

Anslutningen stöder endast att skriva till en Fabric DW-tabell eftersom SQL-analysslutpunkten för en Lakehouse endast kan läsas.

Felsöka

När du är klar visas det lästa svarsfragmentet i cellens utdata. Fel i den aktuella cellen avbryter också efterföljande cellkörningar av notebook-filen. Detaljerad felinformation finns i Spark-programloggarna.

Överväganden för att använda den här kontakten

För närvarande anslutningen:

  • Stöder datahämtning eller läsning från Infrastrukturlager och SQL-analysslutpunkter för lakehouse-objekt.
  • Stöder skrivning av data till en lagertabell med olika lagringslägen – detta är endast tillgängligt med den senaste GA-körningen, t.ex. Runtime 1.3. För närvarande fungerar inte heller skrivåtgärden när Private Link aktiveras och Public Access blockeras.
  • Fabric DW stöder nu Time Travel, men den här anslutningen fungerar inte vid en fråga med tidsresesyntax.
  • Behåller användningssignaturen som den som levereras med Apache Spark för Azure Synapse Analytics för konsekvens. Det är dock inte bakåtkompatibelt att ansluta och arbeta med en dedikerad SQL-pool i Azure Synapse Analytics.
  • Kolumnnamn med specialtecken hanteras genom att ett escape-tecken läggs till innan frågan skickas, baserat på tabell-/vynamn med tre delar. Om en anpassad eller genomströmningsfrågebaserad läsning utförs måste användarna undvika kolumnnamn som skulle innehålla specialtecken.