Partager via


Utiliser le connecteur Apache Spark pour SQL Server et Azure SQL

Important

Les clusters Big Data Microsoft SQL Server 2019 sont mis hors service. La prise en charge des clusters Big Data SQL Server 2019 a pris fin le 28 février 2025. Pour plus d’informations, consultez le billet de blog d’annonce et les options Big Data sur la plateforme Microsoft SQL Server.

Le connecteur Apache Spark pour SQL Server et Azure SQL est un connecteur hautes performances qui vous permet d’utiliser des données transactionnelles dans l’analytique Big Data et conserve les résultats pour les requêtes ad hoc ou la création de rapports. Le connecteur vous permet d’utiliser n’importe quelle base de données SQL, locale ou dans le cloud, comme source de données d’entrée ou récepteur de données de sortie pour les travaux Spark. Le connecteur utilise des API d’écriture en bloc SQL Server. Tous les paramètres d’écriture en bloc peuvent être passés en tant que paramètres facultatifs par l’utilisateur et sont passés as-is par le connecteur à l’API sous-jacente. Pour plus d’informations sur les opérations d’écriture en bloc, consultez Utilisation de la copie en bloc avec le pilote JDBC.

Le connecteur est inclus par défaut dans les clusters Big Data SQL Server.

En savoir plus sur le connecteur dans le référentiel open source. Pour obtenir des exemples, consultez des exemples.

Écrire dans une nouvelle table SQL

Caution

En mode overwrite, le connecteur supprime d’abord la table par défaut si elle existe déjà dans la base de données. Utilisez cette option avec précaution pour éviter toute perte de données inattendue.

Lorsque vous utilisez le mode overwrite si vous n’utilisez pas l’option truncate, lors de la recréation de la table, les index sont perdus. Par exemple, une table columnstore devient un tas. Si vous souhaitez conserver l’indexation existante, spécifiez également l’option truncate avec la valeur true. Par exemple, .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)

Ajouter à la table SQL

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)

Spécifier le niveau d’isolation

Ce connecteur utilise par défaut le niveau d’isolation READ_COMMITTED lors de l’insertion par lot dans la base de données. Si vous souhaitez remplacer cela par un autre niveau d’isolation, utilisez l’option mssqlIsolationLevel comme indiqué ci-dessous.

    .option("mssqlIsolationLevel", "READ_UNCOMMITTED") \

Lecture à partir d’une table SQL

jdbcDF = spark.read \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .option("url", url) \
        .option("dbtable", table_name) \
        .option("user", username) \
        .option("password", password).load()

Mode sans Active Directory

En mode non Active Directory, chaque utilisateur a un nom d’utilisateur et un mot de passe qui doivent être fournis en tant que paramètres pendant l’instanciation du connecteur pour effectuer la lecture et/ou les écritures.

Un exemple d’instanciation de connecteur pour le mode non Active Directory est ci-dessous. Avant d’exécuter le script, remplacez le ? par la valeur de votre compte.

# 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() 

Mode Active Directory

En mode sécurité Active Directory, une fois qu’un utilisateur a généré un fichier de clé tab, l’utilisateur doit fournir principal et keytab en tant que paramètres pendant l’instanciation du connecteur.

Dans ce mode, le pilote charge le fichier keytab dans les conteneurs d’exécuteurs respectifs. Ensuite, les exécuteurs utilisent le nom du principal et le keytab pour générer un jeton utilisé pour créer un connecteur JDBC pour la lecture/écriture.

Un exemple d’instanciation de connecteur pour le mode Active Directory est ci-dessous. Avant d’exécuter le script, remplacez le ? par la valeur de votre compte.

# 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() 

Next steps

Pour plus d’informations sur les clusters Big Data, consultez Guide pratique pour déployer des Clusters Big Data SQL Server sur Kubernetes

Avez-vous des commentaires ou des recommandations de fonctionnalités pour les clusters Big Data SQL Server ? Laissez-nous une note sur les commentaires des clusters Big Data SQL Server.