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.