Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
Deze functie is beschikbaar als preview-versie.
De Spark-connector voor SQL-databases is een bibliotheek met hoge prestaties waarmee u SQL Server-, Azure SQL-databases en Fabric SQL-databases kunt lezen en schrijven. De connector biedt de volgende mogelijkheden:
- Gebruik Spark om grote schrijf- en leesbewerkingen uit te voeren op Azure SQL Database, Azure SQL Managed Instance, SQL Server op Azure VM en Fabric SQL-databases.
- Wanneer u een tabel of weergave gebruikt, ondersteunt de connector beveiligingsmodellen die zijn ingesteld op sql-engineniveau. Deze modellen omvatten beveiliging op objectniveau (OLS), beveiliging op rijniveau (RLS) en beveiliging op kolomniveau (CLS).
De connector is vooraf geïnstalleerd in de Fabric-runtime, dus u hoeft deze niet afzonderlijk te installeren.
Authenticatie
Microsoft Entra-verificatie is geïntegreerd met Microsoft Fabric.
- Wanneer u zich aanmeldt bij de Fabric-werkruimte, worden uw referenties automatisch doorgegeven aan de SQL-engine voor verificatie en autorisatie.
- Vereist dat Microsoft Entra-id is ingeschakeld en geconfigureerd op uw SQL-database-engine.
- Er is geen extra configuratie nodig in uw Spark-code als Microsoft Entra-id is ingesteld. De inloggegevens worden automatisch gekoppeld.
U kunt ook de SQL-verificatiemethode gebruiken (door een SQL-gebruikersnaam en -wachtwoord op te geven) of een service-principal (door een Azure-toegangstoken op te geven voor verificatie op basis van apps).
Permissions
Als u de Spark-connector wilt gebruiken, moet uw identiteit, ongeacht of het een gebruiker of een app is, beschikken over de benodigde databasemachtigingen voor de doel-SQL-engine. Deze machtigingen zijn vereist voor het lezen van of schrijven naar tabellen en weergaven.
Voor Azure SQL Database, Azure SQL Managed Instance en SQL Server op Azure VM:
- De identiteit die de operatie uitvoert, heeft doorgaans
db_datawriter- endb_datareader-machtigingen nodig, en optioneeldb_ownervoor volledige controle.
Voor Fabric SQL-databases:
- De identiteit heeft doorgaans
db_datawriter- endb_datareader-machtigingen nodig, en optioneel ookdb_owner-machtigingen. - De identiteit heeft ook ten minste leesmachtigingen nodig voor de Fabric SQL-database op itemniveau.
Opmerking
Als u een service-principal gebruikt, kan deze worden uitgevoerd als een app (geen gebruikerscontext) of als een gebruiker wanneer gebruikersimitatie is ingeschakeld. De service-principal moet over de vereiste databasemachtigingen beschikken voor de bewerkingen die u wilt uitvoeren.
Voorbeelden van gebruik en code
In deze sectie bieden we codevoorbeelden om te laten zien hoe u de Spark-connector effectief kunt gebruiken voor SQL-databases. Deze voorbeelden hebben betrekking op verschillende scenario's, waaronder het lezen van en schrijven naar SQL-tabellen en het configureren van de connectoropties.
Ondersteunde opties
De minimaal vereiste optie is url als "jdbc:sqlserver://<server>:<port>;database=<database>;" of als spark.mssql.connector.default.url ingesteld.
Wanneer de
urlgegevens zijn opgegeven:-
urlGebruik altijd als eerste voorkeur. - Als
spark.mssql.connector.default.urlniet is ingesteld, zal de connector het instellen en dit hergebruiken voor toekomstig gebruik.
-
Wanneer het
urlniet is opgegeven:- Als
spark.mssql.connector.default.urlis ingesteld, gebruikt de connector de waarde van de spark-config. - Als
spark.mssql.connector.default.urlniet is ingesteld, wordt er een fout weergegeven omdat de vereiste details niet beschikbaar zijn.
- Als
Deze connector ondersteunt de opties die hier zijn gedefinieerd: SQL DataSource JDBC-opties
De connector ondersteunt ook de volgende opties:
| Optie | Standaardwaarde | Description |
|---|---|---|
reliabilityLevel |
BEST_EFFORT (beste inspanning) | Hiermee bepaalt u de betrouwbaarheid van invoegbewerkingen. Mogelijke waarden: BEST_EFFORT (standaard, snelste, kan leiden tot dubbele rijen als een uitvoerder opnieuw wordt opgestart), NO_DUPLICATES (langzamer, zorgt ervoor dat er geen dubbele rijen worden ingevoegd, zelfs als een uitvoerder opnieuw wordt opgestart). Kies op basis van uw tolerantie voor duplicaten en prestatiebehoeften. |
isolationLevel |
"READ_COMMITTED" | Hiermee stelt u het niveau van transactieisolatie in voor SQL-bewerkingen. Mogelijke waarden: READ_COMMITTED (standaard, voorkomt het lezen van niet-doorgevoerde gegevens), READ_UNCOMMITTED, , REPEATABLE_READSNAPSHOT, SERIALIZABLE. Hogere isolatieniveaus kunnen gelijktijdigheid verminderen, maar de gegevensconsistentie verbeteren. |
tableLock |
"onwaar" | Hiermee bepaalt u of de hint voor het vergrendelen op tabelniveau van SQL Server TABLOCK wordt gebruikt tijdens het invoegen van bewerkingen. Mogelijke waarden: true (maakt TABLOCK mogelijk, waardoor de prestaties van bulksgewijs schrijven kunnen worden verbeterd), false (standaard wordt tablock niet gebruikt). Instellen op true kan de doorvoersnelheid voor grote invoegacties verhogen, maar kan de gelijktijdigheid van andere bewerkingen op de tabel verminderen. |
schemaCheckEnabled |
waar | Hiermee bepaalt u of strikte schemavalidatie wordt afgedwongen tussen uw Spark DataFrame en de SQL-tabel. Mogelijke waarden: true (standaard, dwingt strikte schemakoppeling af), false (biedt meer flexibiliteit en kan enkele schemacontroles overslaan). Instellen op false kan helpen bij schema mismatches, maar kan leiden tot onverwachte resultaten als de structuren aanzienlijk verschillen. |
Andere bulk-API-opties kunnen worden ingesteld als opties op de DataFrame api en worden doorgegeven aan api's voor bulksgewijs kopiëren bij schrijven.
Voorbeeld van schrijven en lezen
De volgende code laat zien hoe u gegevens schrijft en leest met behulp van de mssql("<schema>.<table>") methode met automatische Microsoft Entra ID-verificatie.
Aanbeveling
Gegevens worden inline gemaakt voor demonstratiedoeleinden. In een productiescenario zou u doorgaans gegevens lezen uit een bestaande bron of een complexere DataFramebron maken.
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
U kunt ook kolommen selecteren, filters toepassen en andere opties gebruiken wanneer u gegevens uit de SQL-database-engine leest.
Voorbeelden van verificatie
In de volgende voorbeelden ziet u hoe u andere verificatiemethoden gebruikt dan Microsoft Entra ID, zoals service-principal (toegangstoken) en SQL-verificatie.
Opmerking
Zoals eerder vermeld, wordt verificatie van Microsoft Entra-id automatisch verwerkt wanneer u zich aanmeldt bij de Fabric-werkruimte. U hoeft deze methoden dus alleen te gebruiken als voor uw scenario dit vereist is.
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()
Ondersteunde dataframe-opslagmodi
Wanneer u gegevens van Spark naar SQL-databases schrijft, kunt u kiezen uit verschillende opslagmodi. Met de modus Opslaan kunt u bepalen hoe gegevens worden geschreven wanneer de doeltabel al bestaat en kan dit van invloed zijn op schema, gegevens en indexering. Als u deze modi begrijpt, voorkomt u onverwacht gegevensverlies of wijzigingen.
Deze connector ondersteunt de opties die hier zijn gedefinieerd: Spark Save-functies
ErrorIfExists (standaardopslagmodus): Als de doeltabel bestaat, wordt de schrijfbewerking afgebroken en wordt er een uitzondering geretourneerd. Anders wordt er een nieuwe tabel gemaakt met gegevens.
Negeren: Als de doeltabel bestaat, negeert de schrijfbewerking de aanvraag en wordt er geen fout geretourneerd. Anders wordt er een nieuwe tabel gemaakt met gegevens.
Overschrijven: Als de doeltabel bestaat, wordt de tabel verwijderd, opnieuw gemaakt en worden nieuwe gegevens toegevoegd.
Opmerking
Wanneer u gebruikt
overwrite, gaan het oorspronkelijke tabelschema (met name MSSQL-exclusieve gegevenstypen) en tabelindexen verloren en vervangen door het schema dat is afgeleid van uw Spark DataFrame. Als u wilt voorkomen dat schema en indexen verloren gaan, gebruikt.option("truncate", true)u in plaats vanoverwrite.Toevoegen: Als de doeltabel bestaat, worden er nieuwe gegevens aan toegevoegd. Anders wordt er een nieuwe tabel gemaakt met gegevens.
Troubleshoot
Wanneer het proces is voltooid, verschijnt de uitvoer van uw Spark-leesactie in het uitvoergebied van de cel. Fouten van com.microsoft.sqlserver.jdbc.SQLServerException komen rechtstreeks van SQL Server. Gedetailleerde foutinformatie vindt u in de Spark-toepassingslogboeken.