Partager via


Connecteur Spark pour Microsoft Fabric Synapse Data Warehouse

Le connecteur Spark pour Synapse Data Warehouse permet aux développeurs Spark et aux scientifiques des données d'accéder et de travailler avec des données provenant d'un entrepôt et du point de terminaison analytique SQL d'un Lakehouse. Le connecteur offre les fonctionnalités suivantes :

  • Vous pouvez travailler avec des données provenant d'un entrepôt ou d'un point final d'analyse SQL dans le même espace de travail ou dans plusieurs espaces de travail.
  • Le point de terminaison d'analytique SQL d'un Lakehouse est automatiquement découvert en fonction du contexte de l'espace de travail.
  • Le connecter possède une API Spark simplifiée, extrait la complexité sous-jacente et fonctionne avec une seule ligne de code.
  • Pendant que vous accédez à une table ou à une vue, le connecteur respecte les modèles de sécurité définis au niveau du moteur SQL. Ces modèles incluent la sécurité au niveau objet (OLS), la sécurité au niveau ligne (RLS) et la sécurité au niveau colonne (CLS).
  • Le connecteur est préinstallé dans le runtime Fabric, ce qui élimine la nécessité d’une installation distincte.

Remarque

Le connecteur est actuellement en préversion. Pour plus d’informations, consultez les limitations actuelles plus loin dans ce manuel.

Authentification

L’authentification Microsoft Entra est une approche d’authentification intégrée. Les utilisateurs se connectent à l’espace de travail Microsoft Fabric et leurs informations d’identification sont automatiquement transmises au moteur SQL pour l’authentification et l’autorisation. Les informations d’identification sont automatiquement mappées et les utilisateurs ne sont pas obligés de fournir des options de configuration spécifiques.

autorisations

Pour vous connecter au moteur SQL, les utilisateurs ont besoin d’au moins une autorisation d'accès en lecture (similaire aux autorisations CONNECT dans SQL Server) sur l’entrepôt ou le point de terminaison d’analytique SQL (niveau de l’élément). Les utilisateurs ont également besoin des autorisations granulaires au niveau de l’objet pour lire des données à partir de tables ou de vues spécifiques. Pour en savoir plus, consultez Sécurité pour l’entrepôt de données dans Microsoft Fabric.

Modèles et exemples de code

Utiliser une signature de méthode

La commande suivante montre la signature de la méthode synapsesql pour la demande de lecture. L’argument tableName en trois parties est requis pour accéder aux tables ou vues à partir d’un entrepôt et du point de terminaison d’analytique SQL d’un lakehouse. Mettez à jour l’argument avec les noms suivants, en fonction de votre scénario :

  • Partie 1 : nom de l’entrepôt ou du lakehouse.
  • Partie 2 : nom du schéma.
  • Partie 3 : nom de la table ou de la vue.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame

En plus de lire directement à partir d’une table ou d’une vue, ce connecteur vous permet également de spécifier une requête personnalisée ou directe, qui est passée au moteur SQL et le résultat est retourné à Spark.

spark.read.option(Constants.DatabaseName, "<warehouse/lakeshouse name>").synapsesql("<T-SQL Query>") => org.apache.spark.sql.DataFrame

Bien que ce connecteur découvre automatiquement le point de terminaison de l’entrepôt/lakehouse spécifié, si vous souhaitez le spécifier explicitement, vous pouvez le faire.

//For warehouse
spark.conf.set("spark.datawarehouse.<warehouse name>.sqlendpoint", "<sql endpoint,port>")
//For lakehouse
spark.conf.set("spark.lakehouse.<lakeshouse name>.sqlendpoint", "<sql endpoint,port>")
//Read from table
spark.read.synapsesql("<warehouse/lakeshouse name>.<schema name>.<table or view name>") 

Lire des données dans le même espace de travail

Important

Exécutez ces instructions d’importation au début de votre notebook ou avant de commencer à utiliser le connecteur :

Pour Scala

import com.microsoft.spark.fabric.tds.implicits.read.FabricSparkTDSImplicits._

import com.microsoft.spark.fabric.Constants

Pour PySpark (Python)

import com.microsoft.spark.fabric

from com.microsoft.spark.fabric.Constants import Constants

Le code suivant est un exemple de lecture de données à partir d’une table ou d’une vue dans un DataFrame Spark :

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")

Le code suivant est un exemple de lecture de données à partir d’une table ou d’une vue dans un DataFrame Spark avec une limite de nombre de lignes de 10 :

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").limit(10)

Le code suivant est un exemple de lecture de données à partir d’une table ou d’une vue dans un DataFrame Spark après l’application d’un filtre :

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").filter("column name == 'value'")

Le code suivant est un exemple de lecture de données à partir d’une table ou d’une vue dans un DataFrame Spark pour les colonnes sélectionnées uniquement :

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").select("column A", "Column B")

Lire des données entre les espaces de travail

Pour accéder et lire des données à partir d’un entrepôt de données ou d’un lakehouse entre les espaces de travail, vous pouvez spécifier l’ID d’espace de travail où existe votre entrepôt de données ou lakehouse, puis l’ID d’élément lakehouse ou d’entrepôt de données. Cette ligne fournit un exemple de lecture de données à partir d’une table ou d’une vue dans un DataFrame Spark à partir de l’entrepôt de données ou du lakehouse avec l’ID d’espace de travail et l’ID lakehouse/entrepôt de données spécifiés :

# For lakehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.LakehouseId, "<lakehouse item id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")

# For data warehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.DatawarehouseId, "<data warehouse item id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")

Remarque

Lorsque vous exécutez le notebook, le connecteur recherche par défaut l’entrepôt de données ou lakehouse spécifié dans l’espace de travail du lakehouse attaché au notebook. Pour référencer un entrepôt de données ou un lakehouse à partir d’un autre espace de travail, spécifiez l’ID de l’espace de travail et l’ID de l’entrepôt de données ou du lakehouse comme indiqué ci-dessus.

Créer une table lakehouse basée sur les données d’un entrepôt

Ces lignes de code fournissent un exemple de lecture de données à partir d’une table ou d’une vue dans un DataFrame Spark et l’utilisent pour créer une table lakehouse :

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
df.write.format("delta").saveAsTable("<Lakehouse table name>")

Résolution des problèmes

Une fois l’opération terminée, l’extrait de la réponse de lecture s’affiche dans la sortie de la cellule. Tout échec dans la cellule active annule également les exécutions ultérieures de la cellule du Notebook. Des informations détaillées sur les erreurs sont disponibles dans les journaux de l’application Spark.

Limites actuelles

Actuellement, le connecteur :

  • Prise en charge de l’extraction de données de données à partir des entrepôts Fabric et des points d'extrémité d'analytique SQL des éléments de l'entrepôt de données.
  • Fabric DW prend désormais en charge Time Travel. Toutefois ce connecteur ne fonctionne pas pour une requête avec une syntaxe de temps de trajet.
  • Conserve la signature d’utilisation comme celle fournie avec Apache Spark pour Azure Synapse Analytics pour la cohérence. Cependant, il n’est pas à compatibilité descendante pour se connecter et travailler un pool SQL dédié dans Azure Synapse Analytics.
  • Les noms de colonnes avec des caractères spéciaux sont gérés en ajoutant un caractère d’échappement avant la requête, en fonction du nom de la table/vue en 3 parties, est envoyé. Dans le cas d’une lecture personnalisée ou directe basée sur une requête, les utilisateurs sont tenus d’échapper des noms de colonnes qui contiennent des caractères spéciaux.