Database SQL di Azure e connettore SQL Server per Apache Spark
Il connettore Apache Spark per il database SQL di Azure e SQL Server consente a questi database di fungere da origini dati di input e sink di dati di output per i processi di Apache Spark. È possibile usare dati transazionali in tempo reale nel processo di big data analytics e mantenere i risultati per query ad hoc o per la generazione di report.
Rispetto al connettore JDBC incorporato, questo connettore offre la possibilità di inserire dati in grandi quantità nei database SQL. È possibile ottenere eccezionali prestazioni di inserimento di una riga alla volta con una velocità maggiore di 10 o 20 volte. Il connettore Spark per SQL Server e il database SQL di Azure supporta anche l'autenticazione di Microsoft Entra, consentendo di connettersi in modo sicuro ai database SQL di Azure da Azure Synapse Analytics.
Questo articolo illustra come usare l'API DataFrame per connettersi ai database SQL usando il connettore MS SQL. Questo articolo fornisce esempi dettagliati in cui si fa uso dell'API PySpark. Per tutti gli argomenti e gli esempi supportati per la connessione ai database SQL tramite il connettore MS SQL, vedere Esempi di SQL dati di Azure.
Dettagli della connessione
In questo esempio si useranno le utilità di Microsoft Spark per facilitare l'acquisizione di segreti da un insieme di credenziali delle chiavi preconfigurato. Per altre informazioni sulle utilità di Microsoft Spark, vedere Introduzione a utilità di Microsoft Spark.
# The servername is in the format "jdbc:sqlserver://<AzureSQLServerName>.database.windows.net:1433"
servername = "<< server name >>"
dbname = "<< database name >>"
url = servername + ";" + "databaseName=" + dbname + ";"
dbtable = "<< table name >> "
user = "<< username >>"
principal_client_id = "<< service principal client id >>"
principal_secret = "<< service principal secret ho>>"
password = mssparkutils.credentials.getSecret('azure key vault name','secret name')
Nota
Attualmente non è disponibile alcun servizio collegato o supporto pass-through di Microsoft Entra con il connettore SQL di Azure.
Usare il connettore SQL di Azure e SQL Server
Leggere i dati
#Read from SQL table using MS SQL Connector
print("read data from SQL server table ")
jdbcDF = spark.read \
.format("com.microsoft.sqlserver.jdbc.spark") \
.option("url", url) \
.option("dbtable", dbtable) \
.option("user", user) \
.option("password", password).load()
jdbcDF.show(5)
Scrivere dati
try:
df.write \
.format("com.microsoft.sqlserver.jdbc.spark") \
.mode("overwrite") \
.option("url", url) \
.option("dbtable", dbtable) \
.option("user", user) \
.option("password", password) \
.save()
except ValueError as error :
print("MSSQL Connector write failed", error)
print("MSSQL Connector write(overwrite) succeeded ")
Accodare dati
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)
Autenticazione Microsoft Entra
Esempio di Python con entità servizio
import msal
# Located in App Registrations from Azure Portal
tenant_id = "<< tenant id >> "
# Located in App Registrations from Azure Portal
resource_app_id_url = "https://database.windows.net/"
# Define scope of the Service for the app registration before requesting from AAD
scope ="https://database.windows.net/.default"
# Authority
authority = "https://login.microsoftonline.net/" + tenant_id
# Get service principal
service_principal_id = mssparkutils.credentials.getSecret('azure key vault name','principal_client_id')
service_principal_secret = mssparkutils.credentials.getSecret('azure key vault name','principal_secret')
context = msal.ConfidentialClientApplication(
service_principal_id, service_principal_secret, authority
)
token = app.acquire_token_silent([scope])
access_token = token["access_token"]
jdbc_df = spark.read \
.format("com.microsoft.sqlserver.jdbc.spark") \
.option("url", url) \
.option("dbtable", dbtable) \
.option("accessToken", access_token) \
.option("encrypt", "true") \
.option("hostNameInCertificate", "*.database.windows.net") \
.load()
Esempio di Python con password di Active Directory
jdbc_df = spark.read \
.format("com.microsoft.sqlserver.jdbc.spark") \
.option("url", url) \
.option("dbtable", table_name) \
.option("authentication", "ActiveDirectoryPassword") \
.option("user", user_name) \
.option("password", password) \
.option("encrypt", "true") \
.option("hostNameInCertificate", "*.database.windows.net") \
.load()
Importante
- Per eseguire l'autenticazione con Active Directory, è necessario installare una dipendenza obbligatoria.
- Il formato di
user
quando si usa ActiveDirectoryPassword deve essere il formato UPN, ad esempiousername@domainname.com
.- Per Scala è necessario installare l'artefatto
com.microsoft.aad.adal4j
. - Per Python è necessario installare la libreria
adal
. Questa operazione è disponibile tramite PIP.
- Per Scala è necessario installare l'artefatto
- Fare riferimento ai notebook di esempio per esempi; per i driver e le versioni più recenti, vedere Connettore Apache Spark: SQL Server & Azure SQL.
Supporto tecnico
Il connettore Apache Spark per Azure SQL e SQL Server è un progetto open source. Questo connettore non dispone di supporto tecnico Microsoft. Per problemi o domande sul connettore, creare una voce nel repository del progetto. La community del connettore è attiva ed elabora le domande inoltrate.