Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Dieses Feature befindet sich in der Vorschauphase.
Der Spark-Connector für SQL-Datenbanken ist eine Hochleistungsbibliothek, mit der Sie sql Server-, Azure SQL- und Fabric SQL-Datenbanken lesen und schreiben können. Der Connector bietet die folgenden Funktionen:
- Verwenden Sie Spark, um große Schreib- und Lesevorgänge für Azure SQL-Datenbank, azure SQL Managed Instance, SQL Server auf Azure VM und Fabric SQL-Datenbanken auszuführen.
- Wenn Sie eine Tabelle oder Ansicht verwenden, unterstützt der Connector Sicherheitsmodelle, die auf SQL-Modulebene festgelegt sind. Zu diesen Modellen gehören Sicherheit auf Objektebene (Object-Level Security, OLS), Sicherheit auf Zeilenebene (Row-Level Security, RLS) und Sicherheit auf Spaltenebene (Column-Level Security, CLS).
Der Connector ist in der Fabric-Laufzeit vorinstalliert, sodass Sie ihn nicht separat installieren müssen.
Authentifizierung
Die Microsoft Entra-Authentifizierung ist in Microsoft Fabric integriert.
- Wenn Sie sich beim Fabric-Arbeitsbereich anmelden, werden Ihre Anmeldeinformationen automatisch zur Authentifizierung und Autorisierung an das SQL-Modul übergeben.
- Erfordert, dass Microsoft Entra-ID auf Ihrem SQL-Datenbankmodul aktiviert und konfiguriert wird.
- Es ist keine zusätzliche Konfiguration in Ihrem Spark-Code erforderlich, wenn Die Microsoft Entra-ID eingerichtet ist. Die Anmeldeinformationen werden automatisch zugeordnet.
Sie können auch die SQL-Authentifizierungsmethode verwenden (indem Sie einen SQL-Benutzernamen und ein Kennwort angeben) oder einen Dienstprinzipal (indem Sie ein Azure-Zugriffstoken für die appbasierte Authentifizierung bereitstellen).
Erlaubnisse
Um den Spark-Connector zu verwenden, muss Ihre Identität – unabhängig davon, ob es sich um einen Benutzer oder eine App handelt – über die erforderlichen Datenbankberechtigungen für das SQL-Zielmodul verfügen. Diese Berechtigungen sind erforderlich, um aus Tabellen und Ansichten zu lesen oder in Tabellen und Ansichten zu schreiben.
Für Azure SQL-Datenbank, azure SQL Managed Instance und SQL Server auf azure VM:
- Die Identität, die den Vorgang ausführt, benötigt normalerweise
db_datawriter- unddb_datareader-Berechtigungen und optionaldb_ownerfür Vollzugriff.
Für Fabric SQL-Datenbanken:
- Die Identität benötigt in der Regel die Berechtigungen
db_datawriterunddb_datareader, und optionaldb_owner. - Die Identität benötigt außerdem mindestens Leseberechtigungen für die Fabric SQL-Datenbank auf Elementebene.
Hinweis
Wenn Sie einen Dienstprinzipal verwenden, kann er als App (kein Benutzerkontext) oder als Benutzer ausgeführt werden, wenn die Benutzerimitierung aktiviert ist. Der Dienstprinzipal muss über die erforderlichen Datenbankberechtigungen für die Vorgänge verfügen, die Sie ausführen möchten.
Verwendungs- und Codebeispiele
In diesem Abschnitt stellen wir Codebeispiele bereit, um zu veranschaulichen, wie der Spark-Connector für SQL-Datenbanken effektiv verwendet wird. In diesen Beispielen werden verschiedene Szenarien behandelt, z. B. das Lesen von und Schreiben in SQL-Tabellen und das Konfigurieren der Connectoroptionen.
Unterstützte Optionen
Die minimale erforderliche Option ist url wie "jdbc:sqlserver://<server>:<port>;database=<database>;" oder festgelegt spark.mssql.connector.default.url.
Wenn das
urlbereitgestellt wird:- Immer als erste Einstellung verwenden
url. - Wenn
spark.mssql.connector.default.urlnicht festgelegt ist, wird der Connector es festlegen und für die zukünftige Verwendung wiederverwenden.
- Immer als erste Einstellung verwenden
Wenn dies
urlnicht angegeben wird:- Wenn
spark.mssql.connector.default.urlgesetzt ist, verwendet der Connector den Wert aus der Spark-Konfiguration. - Wenn
spark.mssql.connector.default.urlnicht festgelegt ist, wird ein Fehler zurückgegeben, da die benötigten Details nicht vorliegen.
- Wenn
Dieser Connector unterstützt die hier definierten Optionen: SQL DataSource JDBC Optionen
Der Connector unterstützt auch die folgenden Optionen:
| Option | Standardwert | Description |
|---|---|---|
reliabilityLevel |
Bestmögliche Anstrengung | Steuert die Zuverlässigkeit der Einfügevorgänge. Mögliche Werte: BEST_EFFORT (Standard, schnellste, kann zu doppelten Zeilen führen, wenn ein Executor neu gestartet wird), NO_DUPLICATES (langsamer, stellt sicher, dass keine doppelten Zeilen eingefügt werden, auch wenn ein Executor neu gestartet wird). Wählen Sie basierend auf Ihrer Toleranz für Duplikate und Leistungsanforderungen aus. |
isolationLevel |
"READ_COMMITTED" | Legt die Transaktionsisolationsstufe für SQL-Vorgänge fest. Mögliche Werte: READ_COMMITTED (Standard, verhindert das Lesen nicht beständiger Daten), READ_UNCOMMITTED, REPEATABLE_READ, SNAPSHOT, SERIALIZABLE. Höhere Isolationsstufen können die Parallelität verringern, aber die Datenkonsistenz verbessern. |
tableLock |
"false" | Steuert, ob der LOCK-Hinweis auf Tabellenebene auf SQL Server TABLOCK bei Einfügevorgängen verwendet wird. Mögliche Werte: true (aktiviert TABLOCK, wodurch die Leistung des Massenschreibvorgangs verbessert werden kann), false (Standard, verwendet TABLOCK nicht). Die Einstellung auf true kann den Durchsatz für große Dateneinfügungen erhöhen, aber die Parallelität für andere Vorgänge in der Tabelle verringern. |
schemaCheckEnabled |
"true" | Steuert, ob die strenge Schemaüberprüfung zwischen Ihrem Spark DataFrame und der SQL-Tabelle erzwungen wird. Mögliche Werte: true (Standard, erzwingt strengen Schemaabgleich), false (ermöglicht mehr Flexibilität und überspringt möglicherweise einige Schemaprüfungen). Die Einstellung auf false kann bei Schema-Unstimmigkeiten helfen. Wenn sich die Strukturen erheblich unterscheiden, kann dies jedoch zu unerwarteten Ergebnissen führen. |
Andere Massen-API-Optionen können als Optionen für das DataFrame festgelegt werden und beim Schreiben an Massenkopie-APIs übergeben werden.
Beispiel für Schreiben und Lesen
Der folgende Code zeigt, wie Daten unter Verwendung der mssql("<schema>.<table>")-Methode mit automatischer Microsoft Entra ID-Authentifizierung geschrieben und gelesen werden.
Tipp
Daten werden zu Demonstrationszwecken inline erstellt. In einem Produktionsszenario würden Sie in der Regel Daten aus einer vorhandenen Quelle lesen oder eine komplexere DataFrame erstellen.
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
Sie können auch Spalten auswählen, Filter anwenden und andere Optionen verwenden, wenn Sie Daten aus dem SQL-Datenbankmodul lesen.
Authentifizierungsbeispiele
Die folgenden Beispiele zeigen, wie Sie andere Authentifizierungsmethoden als Microsoft Entra-ID verwenden, z. B. Dienstprinzipal (Zugriffstoken) und SQL-Authentifizierung.
Hinweis
Wie bereits erwähnt, wird die Microsoft Entra ID-Authentifizierung automatisch behandelt, wenn Sie sich beim Fabric-Arbeitsbereich anmelden, daher müssen Sie diese Methoden nur verwenden, wenn Ihr Szenario sie erfordert.
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()
Unterstützte DataFrame-Speichermodi
Wenn Sie Daten aus Spark in SQL-Datenbanken schreiben, können Sie aus mehreren Speichermodi wählen. Speichermodi steuern, wie Daten geschrieben werden, wenn die Zieltabelle bereits vorhanden ist, und kann sich auf Schema, Daten und Indizierung auswirken. Wenn Sie diese Modi verstehen, können Sie unerwartete Datenverluste oder Änderungen vermeiden.
Dieser Connector unterstützt die hier definierten Optionen: Spark Save-Funktionen
ErrorIfExists (Standardspeichermodus): Wenn die Zieltabelle vorhanden ist, wird der Schreibvorgang abgebrochen und eine Ausnahme zurückgegeben. Andernfalls wird eine neue Tabelle mit Daten erstellt.
Ignorieren: Wenn die Zieltabelle existiert, ignoriert der Schreibvorgang die Anfrage und gibt keinen Fehler zurück. Andernfalls wird eine neue Tabelle mit Daten erstellt.
Überschreiben: Wenn die Zieltabelle vorhanden ist, wird die Tabelle gelöscht, neu erstellt und neue Daten angefügt.
Hinweis
Bei Verwendung
overwritegehen das ursprüngliche Tabellenschema (insbesondere MSSQL-exklusive Datentypen) und Tabellenindizes verloren und werden durch das Schema ersetzt, das von Ihrem Spark DataFrame abgeleitet wurde. Um zu vermeiden, dass Schema- und Indizes verloren gehen, verwenden Sie.option("truncate", true)anstelle vonoverwrite.Anfügen: Wenn die Zieltabelle existiert, werden neue Daten an sie angefügt. Andernfalls wird eine neue Tabelle mit Daten erstellt.
Troubleshoot
Nach Abschluss des Vorgangs wird die Ausgabe des Spark-Lesevorgangs im Ausgabebereich der Zelle angezeigt. Fehler stammen direkt aus com.microsoft.sqlserver.jdbc.SQLServerException SQL Server. Detaillierte Fehlerinformationen finden Sie in den Spark-Anwendungsprotokollen.