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. Consente di usare dati transazionali in tempo reale nell'analisi dei Big Data e rendere persistenti i risultati per query o report ad hoc.

Rispetto al connettore JDBC incorporato, questo connettore offre la possibilità di inserire dati in grandi quantità nei database SQL. Può migliorare l'inserimento di righe per riga con prestazioni da 10x a 20 volte superiore. Il connettore Spark per SQL Server e database SQL di Azure supporta anche l'autenticazione 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 usando l'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, visitare l'introduzione a Microsoft Spark Utilities.

# 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 il 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 esempio username@domainname.com.
    • Per Scala è necessario installare l'artefatto com.microsoft.aad.adal4j.
    • Per Python è necessario installare la libreria adal. Questa operazione è disponibile tramite PIP.
  • Controllare i notebook di esempio per esempi e per i driver e le versioni più recenti, visitare il connettore Apache Spark: SQL Server & Azure SQL.

Supporto

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.

Passaggi successivi