Sources de données Spark

L’API de source de données Spark vous permet de lire et d’écrire dans des bases de données externes directement à partir de Azure Databricks. Utilisez-la uniquement lorsque vous avez besoin de la flexibilité totale du moteur Spark, que vous souhaitez exécuter des requêtes natives sur la source ou que vous avez besoin d’un accès en écriture aux systèmes externes. En règle générale, Azure Databricks recommande un accès gouverné en lecture seule avec pushdown automatique des requêtes Spark ou SQL. Voir Qu’est-ce que la fédération de requêtes ?.

L’API de source de données Spark a des comportements spécifiques pour la connectivité, l’exécution des requêtes et la détection de schéma.

  • La charge de travail principale et toutes les transformations Spark suivantes s’exécutent sur le cluster Azure Databricks Spark.
  • Lorsque vous utilisez l’option query , l’instruction SQL spécifiée s’exécute entièrement sur la source de données externe. Spark récupère les résultats sans effectuer de pushdown de transformation sur la chaîne de requête.
  • La connexion nécessite un connecteur Azure Databricks groupé, un pilote JDBC fourni par l’utilisateur ou une source de données personnalisée PySpark.
  • Spark lit automatiquement le schéma à partir de la table de base de données externe et mappe ses types aux types Spark SQL.

Utiliser un connecteur groupé

Databricks Runtime inclut des connecteurs optimisés pour les sources de données courantes. Consultez les connecteurs groupés pris en charge pour obtenir la liste complète.

Les connecteurs groupés utilisent host et port comme options distinctes au lieu d’une chaîne d’URL JDBC complète.

Lire des données à l’aide d’une requête directe

L’utilisation de l’option garantit que la query logique de filtrage et de jointure s’exécute sur la base de données source avant que les données atteignent Spark. Pour l’accès en lecture régi avec l’envoi automatique de requêtes et la délégation d’autorisation de Unity Catalog par le biais d’affichages, prenez plutôt en compte les requêtes distantes.

df = (spark.read
  .format("sqlserver")
  .option("host", "<your-sql-server-instance>.database.windows.net")
  .option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
  .option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
  .option("database", "<database-name>")
  .option("query", "SELECT id, name FROM users WHERE active = 1")
  .load())

Écrire des données

Spécifiez un mode d’écriture avec .mode() pour contrôler la façon dont les données sont écrites. Permet append d’ajouter des lignes à une table existante ou overwrite de remplacer son contenu.

(df.write
  .format("sqlserver")
  .mode("overwrite")
  .option("host", "<your-sql-server-instance>.database.windows.net")
  .option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
  .option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
  .option("database", "<database-name>")
  .option("dbtable", "<table-name>")
  .save())

Utiliser une connexion JDBC UC

Si un connecteur spécifique à la source n’est pas groupé ou si vous souhaitez utiliser une version spécifique du pilote JDBC, utilisez une connexion de catalogue JDBC Unity. Cela vous permet de centraliser la gestion des informations d’identification et d’apporter votre propre pilote JDBC.

Une connexion de catalogue JDBC Unity offre plusieurs avantages par rapport à l’utilisation directe d’un connecteur groupé ou d’un pilote JDBC brut. Avec une connexion de catalogue JDBC Unity, vous pouvez :

  • Apportez votre propre fichier JAR de pilote JDBC pour toute base de données prenant en charge JDBC.
  • Créez la connexion une fois et réutilisez-la sur des clusters serverless, standard et dédiés.
  • Utilisez l’accès régi à la source de données à l’aide d’un objet de connexion de catalogue Unity.
  • Masquer les informations d’identification de connexion de l’utilisateur interrogeant.
  • Lisez et écrivez dans des bases de données externes via l’API de source de données Spark.

Pour utiliser une connexion de catalogue JDBC Unity, spécifiez databricks.connection dans vos options Spark :

df = (spark.read
  .format("jdbc")
  .option("databricks.connection", "<connection-name>")
  .option("query", "SELECT * FROM external_table")
  .load())

Pour obtenir des instructions d’installation, consultez la connexion JDBC.

Utiliser un connecteur personnalisé sur des clusters dédiés

Sur les clusters dédiés (classiques), vous pouvez installer des connecteurs de source de données Spark tiers ou des pilotes JDBC qui ne sont pas groupés avec Databricks Runtime.

Utilisez cette approche quand :

  • Vous avez besoin d’un connecteur Spark tiers pour les systèmes tels que MongoDB, Cassandra, Couchbase ou Elasticsearch.
  • Vous avez besoin d’une version de pilote spécifique qui n’est pas groupée dans le runtime.
  • Vous souhaitez installer un pilote JDBC directement sur le cluster sans configurer de connexion de catalogue Unity.

Installer un connecteur ou un pilote

Installez la bibliothèque sur votre cluster via Compute>your cluster>Libraries>Install new. Vous pouvez utiliser directement des coordonnées Maven sans avoir à télécharger ni à téléverser aucun fichier JAR. Redémarrez le cluster pour que la bibliothèque prenne effet.

Lire les données

Une fois le connecteur installé, utilisez le nom de format du connecteur et ses options de connexion requises pour lire les données.

df = (spark.read
  .format("mongodb")
  .option("connection.uri", "mongodb://<hostname>:27017")
  .option("database", "<database-name>")
  .option("collection", "<collection-name>")
  .load())

Écrire des données

Utilisez le même nom de format et les mêmes options de connexion pour réécrire les données dans la source.

(df.write
  .format("mongodb")
  .mode("overwrite")
  .option("connection.uri", "mongodb://<hostname>:27017")
  .option("database", "<database-name>")
  .option("collection", "<collection-name>")
  .save())

Considérations

Gardez à l’esprit ce qui suit lors de l’utilisation de connecteurs personnalisés sur des clusters dédiés.

  • Le pilote ou le connecteur est disponible uniquement sur le cluster où il est installé.
  • Les JAR Spark tiers personnalisés ne sont pas pris en charge sur Databricks SQL, en mode serverless ou sur les clusters en mode d’accès standard. Pour ces types de calcul, utilisez des connecteurs groupés ou des connexions de catalogue JDBC Unity.

Sources de données personnalisées de PySpark

L’API DataSource Python vous permet de créer entièrement des connecteurs de données personnalisés dans Python, sans bibliothèques JARs ou JVM. Utilisez cette option lorsque vous devez vous connecter à des API REST, à des applications SaaS ou à un système sans interface JDBC, ou lorsque vous souhaitez générer des données synthétiques par programmation. L’API prend en charge les lectures et écritures par lots et en streaming.

Note

Les sources de données personnalisées PySpark nécessitent Databricks Runtime 15.4 LTS ou version ultérieure.

Pour obtenir des exemples et des informations de référence sur l’API, consultez les sources de données personnalisées PySpark.

Comparer les stratégies d’intégration

Le tableau suivant compare l’API de source de données Spark à Lakehouse Federation et Lakeflow Connect pour vous aider à choisir l’approche appropriée pour votre cas d’usage.

Fonctionnalité API de source de données Spark Fédération de Lakehouse Lakeflow Connect
Cas d’usage principal ETL complexe, logique Spark personnalisée, requêtes directes Requêtes ad hoc, création de rapports BI Ingestion automatisée à grande échelle
Déplacement des données Chargé dans la mémoire Spark (éphémère) Chargé dans la mémoire Spark (éphémère) Copié vers Delta Lake (persistant)
Exécution de la requête Abaissement manuel grâce à l’option native query Envoi automatique des filtres Spark et SQL, jointures et agrégations Non applicable (réplication complète de la table)
Governance Connexion Unity Catalog (JDBC) ou étendues de secrets Catalogue Unity (catalogue fédéré) Unity Catalog (pipeline managé)
Idéal pour Utilisateurs avancés ayant besoin de toute la flexibilité de Spark Réduction du déplacement des données tout en préservant la gouvernance CDC de production et pipelines d’ingestion

Connecteurs intégrés pris en charge

Les sources de données suivantes sont regroupées dans Databricks Runtime et peuvent être appelées directement via Spark. Les lectures et les écritures sont prises en charge sur les clusters dédiés et standard.

Note

Les opérations d’écriture vers le calcul sans serveur sont prises en charge pour PostgreSQL, SQL Server, MySQL, Snowflake et Redshift. Consultez les options d’écriture sans serveur pour les connecteurs intégrés pour connaître les options de connecteur prises en charge.

Source de données spark.format() nom
PostgreSQL "postgresql"
SQL Server "sqlserver"
MySQL et MariaDB "mysql"
Flocon de neige "snowflake"
Amazon Redshift "redshift"
Google BigQuery "bigquery"
Azure Synapse "SQLDW"
HTTP "http"

Limitations

Les limitations suivantes s’appliquent lors de l’utilisation de l’API de source de données Spark dans Azure Databricks.

  • Les options Spark pour les sources de données groupées sont limitées à query, dbtableet un petit ensemble d’options spécifiques au connecteur.
  • Les jars Spark tiers personnalisés ne peuvent être installés que sur des clusters dédiés. Pour les clusters serverless ou standard, utilisez des connecteurs groupés ou des connexions de catalogue JDBC Unity.
  • Les sources de données personnalisées PySpark nécessitent Databricks Runtime 15.4 LTS ou version ultérieure.