Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 ochPublic 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.