Aller au contenu principal

Sources de données Spark

L’API Spark Data Source vous permet de lire et d’écrire dans des bases de données externes directement depuis Databricks. Utilisez-le uniquement lorsque vous avez besoin de toute la flexibilité 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 général, Databricks recommande un accès régi et en lecture seule avec transfert automatique des requêtes Spark ou SQL. Voir Qu’est-ce que la fédération de query ?.

L'API Spark Data Source a des comportements spécifiques pour la connectivité, l'exécution de query et la détection de schéma.

  • La charge de travail principale et toutes les Transformations Spark ultérieures s'exécutent sur le cluster Spark de Databricks.
  • Lors de l'utilisation de 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 Transformations sur la chaîne de query.
  • La connexion nécessite un connecteur fourni par Databricks, un Driver JDBC fourni par l'utilisateur ou une source de données personnalisée PySpark.
  • Spark lit automatiquement le schéma 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 regroupés pris en charge pour 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.

Lisez les données à l’aide d’une query pass-through​

L'option query garantit que la logique de filtrage et de jointure s'exécute sur la base de données source avant que les données n'atteignent Spark. Pour un accès en lecture gouverné avec un pushdown de query automatique et une délégation d'autorisations Unity Catalog via des vues, envisagez plutôt les queries distantes.

Python
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 comment les données sont écrites. Utilisez append pour ajouter des lignes à une table existante ou overwrite pour en remplacer le contenu.

Python
(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 Unity Catalog​

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

Une connexion JDBC Unity Catalog offre plusieurs avantages par rapport à l'utilisation directe d'un connecteur groupé ou d'un Driver JDBC brut. Avec une connexion JDBC Unity Catalog, vous pouvez :

  • Utilisez votre propre fichier JAR de Driver JDBC pour toute base de données prenant en charge JDBC.
  • Créez la connexion une seule fois et réutilisez-la sur le compute serverless, standard et dédié.
  • Utilisez l'accès géré à la source de données à l'aide d'un objet de connexion Unity Catalog.
  • Masquer les identifiants de connexion à l'utilisateur qui effectue la requête.
  • Lire et écrire dans des bases de données externes via l'API Spark Data Source.

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

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

Pour les instructions de configuration, consultez Connexion JDBC.

Use a custom connector on dedicated compute​

Sur le compute dédié (classique), vous pouvez installer des connecteurs de sources de données Spark ou des drivers JDBC tiers qui ne sont pas inclus dans le Databricks Runtime.

Utilisez cette approche lorsque :

  • Vous avez besoin d'un connecteur Spark tiers pour des systèmes tels que : MongoDB, Cassandra, Couchbase ou Elasticsearch.
  • Vous avez besoin d'une version de Driver spécifique qui n'est pas fournie dans le runtime.
  • Vous souhaitez installer un driver JDBC directement sur le cluster sans configurer de connexion Unity Catalog.

Installez un connecteur ou un Driver​

Installez la bibliothèque sur votre cluster via **Compute** > **votre cluster** > **Bibliothèques** > **Installer de nouvelles**. Vous pouvez utiliser les coordonnées Maven directement sans download ou upload de JAR. Redémarrez le cluster pour que la bibliothèque prenne effet.

Lire les données​

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

Python
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 à la source.

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

Considérations​

Gardez les éléments suivants à l’esprit lors de l’utilisation de connecteurs personnalisés sur un compute dédié.

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

Sources de données personnalisées PySpark​

L'API Python DataSource vous permet de créer des connecteurs de données personnalisés entièrement en Python, sans JAR ni bibliothèques basées sur JVM. Utilisez ceci lorsque vous devez vous connecter à des API REST, des applications SaaS ou tout 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 les écritures en batch et en streaming.

remarque

Les sources de données personnalisées PySpark nécessitent Databricks Runtime 15,4 LTS ou une version ultérieure.

Pour la configuration, des exemples et la référence de l’API, voir sources de données personnalisées PySpark.

Comparez les stratégies d'intégration​

Le tableau suivant compare l'API de source de données Spark par rapport à Lakehouse Federation et Lakeflow Connect pour vous aider à choisir la bonne approche pour votre cas d'utilisation.

Fonctionnalité

API de source de données Spark

Lakehouse Federation

LakeFlow Connect

Cas d'usage principal

ETL complexe, logique Spark personnalisée, requêtes pass-through

Requêtes ad hoc, 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 query

Pushdown manuel utilisant l'option native query

Descente automatique des filtres, jointures et agrégations Spark et SQL.

Non applicable (réplication complète de la table)

Gouvernance

Connexion Unity Catalog (JDBC) ou secret scopes

Unity Catalog (catalogue fédéré)

Unity Catalog (pipeline géré)

Idéal pour

Utilisateurs avancés ayant besoin de toute la flexibilité de Spark

Minimiser le déplacement des données tout en préservant la gouvernance.

Pipelines CDC et d'ingestion de production

Fonctionnalité

API de source de données Spark

Lakehouse Federation

LakeFlow Connect

Cas d'usage principal

ETL complexe, logique Spark personnalisée, requêtes pass-through

Requêtes ad hoc, 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 query

Pushdown manuel utilisant l'option native query

Descente automatique des filtres, jointures et agrégations Spark et SQL.

Non applicable (réplication complète de la table)

Gouvernance

Connexion Unity Catalog (JDBC) ou secret scopes

Unity Catalog (catalogue fédéré)

Unity Catalog (pipeline géré)

Idéal pour

Utilisateurs avancés ayant besoin de toute la flexibilité de Spark

Minimiser le déplacement des données tout en préservant la gouvernance.

Pipelines CDC et d'ingestion de production

Connecteurs groupés pris en charge​

Les sources de données suivantes sont intégrées dans Databricks Runtime et peuvent être appelées directement via Spark. Les opérations de lecture et d’écriture sont prises en charge sur les types de compute dédiés et standards.

remarque

Les écritures sur le compute serverless sont prises en charge pour PostgreSQL, SQL Server, MySQL, Snowflake et Redshift. Consultez les options d'écriture Serverless pour les connecteurs groupé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"

Snowflake

"snowflake"

Amazon Redshift

"redshift"

Google BigQuery

"bigquery"

Azure Synapse

"SQLDW"

HTTP

"http"

Source de données

spark.format() Nom

PostgreSQL

"postgresql"

SQL Server

"sqlserver"

MySQL et MariaDB

"mysql"

Snowflake

"snowflake"

Amazon Redshift

"redshift"

Google BigQuery

"bigquery"

Azure Synapse

"SQLDW"

HTTP

"http"

Migrer les charges de travail BigQuery JDBC pour Databricks Runtime 20​

Starting with Databricks Runtime 20, Databricks Runtime no longer includes the bundled BigQuery JDBC driver. Databricks Runtime 19 and earlier continue to include the driver. This change affects classic compute workloads that use Spark JDBC with a jdbc:bigquery: URL.

Pour identifier les charges de travail concernées, recherchez une URL jdbc:bigquery: dans leur code et leur configuration. Ce chemin JDBC est distinct du connecteur Google BigQuery groupé, qui utilise .format("bigquery") et reste disponible. Sans Driver BigQuery JDBC installé, les charges de travail concernées échouent avec une erreur de type Driver introuvable.

Avant de déplacer une charge de travail affectée vers Databricks Runtime 20 ou version ultérieure, choisissez l'une des options suivantes :

Pour plus d'informations sur les Drivers disponibles auprès de Google, consultez la page Drivers ODBC et JDBC BigQuery.

Limitations​

Les limitations suivantes s'appliquent lors de l'utilisation de l'API Spark Data Source dans Databricks.

  • Les options Spark pour les sources de données groupées sont limitées à query, dbtable et un petit ensemble d’options spécifiques aux connecteurs.
  • Les fichiers JAR Spark personnalisés tiers ne peuvent être installés que sur un compute dédié. Pour un compute serverless ou standard, utilisez les connecteurs groupés ou les connexions Unity Catalog JDBC.
  • Les sources de données personnalisées PySpark nécessitent Databricks Runtime 15,4 LTS ou une version ultérieure.