Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Viktigt!
Den här funktionen är i förhandsversion.
Spark-anslutningsappen för SQL-databaser är ett bibliotek med höga prestanda som gör att du kan läsa från och skriva till SQL Server, Azure SQL-databaser och Fabric SQL-databaser. Anslutningsappen har följande funktioner:
- Använd Spark för att köra stora skriv- och läsåtgärder i Azure SQL Database, Azure SQL Managed Instance, SQL Server på virtuella Azure-datorer och Sql-infrastrukturdatabaser.
- När du använder en tabell eller en vy stöder anslutningsappen säkerhetsmodeller som angetts 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, så du behöver inte installera den separat.
Authentication
Microsoft Entra-autentisering är integrerat med Microsoft Fabric.
- När du loggar in på arbetsytan Infrastruktur skickas dina autentiseringsuppgifter automatiskt till SQL-motorn för autentisering och auktorisering.
- Kräver att Microsoft Entra-ID aktiveras och konfigureras på SQL-databasmotorn.
- Ingen extra konfiguration krävs i Spark-koden om Microsoft Entra-ID har konfigurerats. Autentiseringsuppgifterna mappas automatiskt.
Du kan också använda SQL-autentiseringsmetoden (genom att ange ett SQL-användarnamn och lösenord) eller ett huvudnamn för tjänsten (genom att tillhandahålla en Azure-åtkomsttoken för appbaserad autentisering).
Permissions
Om du vill använda Spark-anslutningsappen måste din identitet – oavsett om det är en användare eller en app – ha nödvändiga databasbehörigheter för SQL-målmotorn. Dessa behörigheter krävs för att läsa från eller skriva till tabeller och vyer.
För Azure SQL Database, Azure SQL Managed Instance och SQL Server på en virtuell Azure-dator:
- Identiteten som kör åtgärden behöver
db_datawritervanligtvis ochdb_datareaderbehörigheter, och eventuelltdb_ownerför fullständig kontroll.
För Fabric SQL-databaser:
- Identiteten behöver vanligtvis behörigheter
db_datawriterochdb_datareader, och eventuelltdb_owner. - Identiteten behöver också minst läsbehörighet för SQL-databasen Fabric på objektnivå.
Anmärkning
Om du använder tjänstens huvudnamn kan den köras som en app (ingen användarkontext) eller som en användare om användarpersonifiering är aktiverat. Tjänstens huvudkonto måste ha nödvändiga databasbehörigheter för de åtgärder som du vill utföra.
Användnings- och kodexempel
I det här avsnittet tillhandahåller vi kodexempel som visar hur du använder Spark-anslutningsappen för SQL-databaser effektivt. De här exemplen omfattar olika scenarier, inklusive läsning från och skrivning till SQL-tabeller och konfiguration av anslutningsalternativ.
Alternativ som stöds
Det minsta obligatoriska alternativet är url som "jdbc:sqlserver://<server>:<port>;database=<database>;" eller ange spark.mssql.connector.default.url.
När
urltillhandahålls:- Använd
urlalltid som första inställning. - Om
spark.mssql.connector.default.urlinte har angetts ställer anslutningsappen in den och återanvänder den för framtida användning.
- Använd
När inte
urlanges:- Om
spark.mssql.connector.default.urlhar angetts använder anslutningsappen värdet från spark-konfigurationen. - Om
spark.mssql.connector.default.urlinte har angetts utlöses ett fel eftersom nödvändig information inte är tillgänglig.
- Om
Den här anslutningsappen stöder de alternativ som definieras här: SQL DataSource JDBC-alternativ
Anslutningsappen har också stöd för följande alternativ:
| Option | Standardvärde | Description |
|---|---|---|
reliabilityLevel |
BEST_EFFORT | Styr tillförlitligheten för infogningsåtgärder. Möjliga värden: BEST_EFFORT (som standard, snabbast, kan resultera i dubblettrader om en exekverare startar om), NO_DUPLICATES (långsammare, ser till att inga dubblettrader läggs in även om en exekverare startar om). Välj baserat på din tolerans för dubbletter och prestandabehov. |
isolationLevel |
"READ_COMMITTED" | Anger transaktionsisoleringsnivån för SQL-åtgärder. Möjliga värden: READ_COMMITTED (standard förhindrar läsning av data som inte har genererats), READ_UNCOMMITTED, REPEATABLE_READ, SNAPSHOT, SERIALIZABLE. Högre isoleringsnivåer kan minska samtidigheten men förbättra datakonsekvensen. |
tableLock |
"falskt" | Styr om låsledtråden på SQL Server TABLOCK-tabellnivå används under infogningsoperationer. Möjliga värden: true (aktiverar TABLOCK, vilket kan förbättra massskrivningsprestanda), false (standard använder inte TABLOCK). Inställningen till true kan öka dataflödet för stora infogningar, men kan minska samtidigheten för andra åtgärder i tabellen. |
schemaCheckEnabled |
sant | Styr om strikt schemaverifiering tillämpas mellan spark-tabellen DataFrame och SQL-tabellen. Möjliga värden: true (standard, tillämpar strikt schemamatchning), false (ger mer flexibilitet och kan hoppa över vissa schemakontroller). Ställ in false kan hjälpa med schema oförenligheter men kan leda till oväntade resultat om strukturerna skiljer sig avsevärt. |
Andra alternativ för mass-API kan anges som alternativ för DataFrame och skickas till masskopierings-API:er vid skrivning.
Skriva och läsa exempel
Följande kod visar hur du skriver och läser data med hjälp mssql("<schema>.<table>") av metoden med automatisk Microsoft Entra-ID-autentisering.
Tips/Råd
Data skapas inlinje i demonstrationssyfte. I ett produktionsscenario skulle du vanligtvis läsa data från en befintlig källa eller skapa en mer komplex DataFrame.
import com.microsoft.sqlserver.jdbc.spark
url = "jdbc:sqlserver://<server>:<port>;database=<database>;"
row_data = [("Alice", 1),("Bob", 2),("Charlie", 3)]
column_header = ["Name", "Age"]
df = spark.createDataFrame(row_data, column_header)
df.write.mode("overwrite").option("url", url).mssql("dbo.publicExample")
spark.read.option("url", url).mssql("dbo.publicExample").show()
url = "jdbc:sqlserver://<server>:<port>;database=<database2>;" # different database
df.write.mode("overwrite").option("url", url).mssql("dbo.tableInDatabase2") # default url is updated
spark.read.mssql("dbo.tableInDatabase2").show() # no url option specified and will use database2
Du kan också välja kolumner, använda filter och använda andra alternativ när du läser data från SQL-databasmotorn.
Autentiseringsexempel
I följande exempel visas hur du använder andra autentiseringsmetoder än Microsoft Entra-ID, till exempel tjänstens huvudnamn (åtkomsttoken) och SQL-autentisering.
Anmärkning
Som tidigare nämnts hanteras Microsoft Entra ID-autentisering automatiskt när du loggar in på Fabric-arbetsytan, så du behöver bara använda dessa metoder om ditt scenario kräver dem.
import com.microsoft.sqlserver.jdbc.spark
url = "jdbc:sqlserver://<server>:<port>;database=<database>;"
row_data = [("Alice", 1),("Bob", 2),("Charlie", 3)]
column_header = ["Name", "Age"]
df = spark.createDataFrame(row_data, column_header)
from azure.identity import ClientSecretCredential
credential = ClientSecretCredential(tenant_id="", client_id="", client_secret="") # service principal app
scope = "https://database.windows.net/.default"
token = credential.get_token(scope).token
df.write.mode("overwrite").option("url", url).option("accesstoken", token).mssql("dbo.publicExample")
spark.read.option("accesstoken", token).mssql("dbo.publicExample").show()
DataFrame-lagringslägen som stöds
När du skriver data från Spark till SQL-databaser kan du välja mellan flera sparlägen. Spara lägen styr hur data skrivs när måltabellen redan finns och kan påverka schema, data och indexering. Genom att förstå dessa lägen kan du undvika oväntade dataförluster eller ändringar.
Den här anslutningsappen stöder de alternativ som definierats här: Spark Save-funktioner
ErrorIfExists (standardsparläge): Om måltabellen finns avbryts skrivning och ett undantag returneras. Annars skapas en ny tabell med data.
Ignorera: Om måltabellen finns ignorerar skrivningen begäran och returnerar inget fel. Annars skapas en ny tabell med data.
Skriv över: Om måltabellen finns tas tabellen bort, återskapas och nya data läggs till.
Anmärkning
När du använder
overwritegår det ursprungliga tabellschemat (särskilt MSSQL-exklusiva datatyper) och tabellindex förlorade och ersätts av schemat som härleds från Spark DataFrame. Om du vill undvika att förlora schema och index använder du.option("truncate", true)i stället föroverwrite.Tillägg: Om måltabellen finns läggs nya data till. Annars skapas en ny tabell med data.
Felsökning
När processen är klar visas utdata från Spark-läsåtgärden i cellens utdataområde. Fel från com.microsoft.sqlserver.jdbc.SQLServerException kommer direkt från SQL Server. Du hittar detaljerad felinformation i Spark-programloggarna.