Verwenden des Apache Spark-Connectors für SQL Server und Azure SQL
Wichtig
Das Microsoft SQL Server 2019-Big Data-Cluster-Add-On wird eingestellt. Der Support für SQL Server 2019-Big Data-Clusters endet am 28. Februar 2025. Alle vorhandenen Benutzer*innen von SQL Server 2019 mit Software Assurance werden auf der Plattform vollständig unterstützt, und die Software wird bis zu diesem Zeitpunkt weiterhin über kumulative SQL Server-Updates verwaltet. Weitere Informationen finden Sie im Ankündigungsblogbeitrag und unter Big Data-Optionen auf der Microsoft SQL Server-Plattform.
Der Apache Spark-Connector für SQL Server und Azure SQL ist ein Hochleistungsconnector, der es Ihnen ermöglicht, Transaktionsdaten in Big Data-Analysen zu nutzen und Ergebnisse für Ad-hoc-Abfragen oder Berichte zu speichern. Der Connector ermöglicht Ihnen die Verwendung einer beliebigen SQL-Datenbank (lokal oder in der Cloud) als Eingabedatenquelle oder als Ausgabedatensenke für Spark-Aufträge. Der Connector verwendet SQL Server-APIs für Massenschreibvorgänge. Alle Parameter für Massenschreibvorgänge können vom Benutzer als optionale Parameter übergeben werden und werden vom Connector unverändert an die zugrunde liegende API übergeben. Weitere Informationen zu Massenschreibvorgängen finden Sie unter Verwenden von Massenkopieren mit dem JDBC Driver.
Der Connector ist standardmäßig in Big Data-Clustern in SQL Server enthalten.
Weitere Informationen zum Connector finden Sie im Open-Source-Repository. Beispiele finden Sie unter Beispiele.
Schreiben in eine neue SQL-Tabelle
Achtung
Im Modus overwrite
löscht der Connector zuerst die Tabelle, wenn sie standardmäßig bereits in der Datenbank vorhanden ist. Verwenden Sie diese Option mit der gebotenen Sorgfalt, um unerwartete Datenverluste zu vermeiden.
Wenn Sie bei Verwendung des Modus overwrite
nicht die Option truncate
verwenden, gehen bei der erneuten Erstellung der Tabelle Indizes verloren. Beispielsweise wird eine Columnstore-Tabelle zu einem Heap. Wenn Sie die vorhandene Indizierung beibehalten möchten, müssen Sie auch die Option truncate
mit dem Wert true
angeben. Beispiel: .option("truncate",true)
server_name = "jdbc:sqlserver://{SERVER_ADDR}"
database_name = "database_name"
url = server_name + ";" + "databaseName=" + database_name + ";"
table_name = "table_name"
username = "username"
password = "password123!#" # Please specify password here
try:
df.write \
.format("com.microsoft.sqlserver.jdbc.spark") \
.mode("overwrite") \
.option("url", url) \
.option("dbtable", table_name) \
.option("user", username) \
.option("password", password) \
.save()
except ValueError as error :
print("Connector write failed", error)
Anfügen an eine SQL-Tabelle
try:
df.write \
.format("com.microsoft.sqlserver.jdbc.spark") \
.mode("append") \
.option("url", url) \
.option("dbtable", table_name) \
.option("user", username) \
.option("password", password) \
.save()
except ValueError as error :
print("Connector write failed", error)
Angeben der Isolationsstufe
Beim Durchführen der Masseneinfügung in die Datenbank verwendet dieser Connector standardmäßig die Isolationsstufe READ_COMMITTED. Wenn Sie diese in eine andere Isolationsstufe ändern möchten, verwenden Sie die Option mssqlIsolationLevel
wie unten gezeigt.
.option("mssqlIsolationLevel", "READ_UNCOMMITTED") \
Lesen aus einer SQL-Tabelle
jdbcDF = spark.read \
.format("com.microsoft.sqlserver.jdbc.spark") \
.option("url", url) \
.option("dbtable", table_name) \
.option("user", username) \
.option("password", password).load()
Nicht-Active Directory-Modus
Im Nicht-Active Directory-Sicherheitsmodus verfügt jeder Benutzer über einen Benutzernamen und ein Kennwort. Diese Angaben müssen bei der Instanziierung des Connectors als Parameter angegeben werden, um Lese- und/oder Schreibvorgänge ausführen zu können.
Nachfolgend finden Sie ein Beispiel für die Connectorinstanziierung im Nicht-Active Directory-Modus. Ersetzen Sie vor dem Ausführen des Skripts die ?
durch die jeweiligen Werte für Ihr Konto.
# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark"
url = "jdbc:sqlserver://master-p-svc;databaseName=?;"
writer = df.write \
.format(connector_type)\
.mode("overwrite")
.option("url", url) \
.option("user", ?) \
.option("password",?)
writer.save()
Active Directory-Modus
Im Active Directory-Sicherheitsmodus muss der Benutzer nach dem Generieren einer Schlüsseltabellendatei die Parameter principal
und keytab
bei der Containerinstanziierung angeben.
In diesem Modus lädt der Treiber die Schlüsseltabellendatei in die entsprechenden Executor-Container. Dann verwenden die Executor-Container den Prinzipalnamen und die Schlüsseltabelle, um ein Token zu generieren, das zum Erstellen eines JDBC-Connectors für Lese-/Schreibvorgänge verwendet wird.
Nachfolgend finden Sie ein Beispiel für die Connectorinstanziierung im Active Directory-Modus. Ersetzen Sie vor dem Ausführen des Skripts die ?
durch die jeweiligen Werte für Ihr Konto.
# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark"
url = "jdbc:sqlserver://master-p-svc;databaseName=?;integratedSecurity=true;authenticationScheme=JavaKerberos;"
writer = df.write \
.format(connector_type)\
.mode("overwrite")
.option("url", url) \
.option("principal", ?) \
.option("keytab", ?)
writer.save()
Nächste Schritte
Weitere Informationen zu Big Data-Cluster finden Sie unter Vorgehensweise: Bereitstellen von Big Data-Cluster für SQL Server auf Kubernetes.
Haben Sie Feedback oder Featurevorschläge für SQL Server-Big Data-Cluster? Senden Sie uns eine Nachricht über Feedback zu Big Data-Cluster für SQL Server.