Dela via


Spark-anslutningsprogram för Microsoft Fabric Data Warehouse

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.

Kommentar

Anslutningsappen är för närvarande i förhandsversion. Mer information finns i de aktuella begränsningarna senare i den här artikeln.

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. Argumentet i tre delar tableName krävs för åtkomst till tabeller eller vyer från ett lager och SQL-analysslutpunkten för 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:

För Scala

import com.microsoft.spark.fabric.tds.implicits.read.FabricSparkTDSImplicits._

import com.microsoft.spark.fabric.Constants

För PySpark (Python)

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 mellan arbetsytor

Om du vill komma åt och läsa data från ett lager eller ett sjöhus mellan arbetsytor kan du ange arbetsyte-ID:t där ditt lager eller lakehouse finns och sedan lakehouse- eller lagerartikel-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>")

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.

Aktuella begränsningar

För närvarande anslutningsappen:

  • Stöder datahämtning från Infrastrukturlager och SQL-analysslutpunkter för lakehouse-objekt.
  • Fabric DW stöder Time Travel nu men den här anslutningsappen fungerar inte för 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 escape-tecken läggs till innan frågan, baserat på tabell-/vynamnet i 3 delar, skickas. Om en anpassad eller genomströmningsfrågebaserad läsning utförs måste användarna undvika kolumnnamn som skulle innehålla specialtecken.