Condividi tramite


Connettore Spark per Microsoft Fabric Synapse Data Warehouse

Il connettore Spark per Synapse Data Warehouse consente agli sviluppatori Spark e ai data scientist di accedere e lavorare con i dati di un warehouse e l'endpoint di analisi SQL di una lakehouse. Il connettore offre le funzionalità seguenti:

  • È possibile usare i dati di un endpoint di analisi SQL o warehouse nella stessa area di lavoro o in più aree di lavoro.
  • L'endpoint di analisi SQL di un lakehouse viene individuato automaticamente in base al contesto dell'area di lavoro.
  • Il connettore ha un'API Spark semplificata, astrae la complessità sottostante e funziona con una sola riga di codice.
  • Mentre si accede a una tabella o a una vista, il connettore rispetta i modelli di sicurezza definiti a livello di motore SQL. Questi modelli includono la sicurezza a livello di oggetto ( OLS), la sicurezza a livello di riga e la sicurezza a livello di colonna (CLS).
  • Il connettore viene preinstallato all'interno del runtime di Fabric, eliminando la necessità di un'installazione separata.

Nota

Il connettore è attualmente in anteprima. Per altre informazioni, vedere le limitazioni correnti più avanti in questo articolo.

Autenticazione

L'autenticazione di Microsoft Entra è un approccio di autenticazione integrato. Gli utenti accedono all'area di lavoro di Microsoft Fabric e le credenziali vengono passate automaticamente al motore SQL per l'autenticazione e l'autorizzazione. Le credenziali vengono mappate automaticamente e gli utenti non devono fornire opzioni di configurazione specifiche.

Autorizzazioni

Per connettersi al motore SQL, gli utenti devono avere almeno l'autorizzazione di lettura (simile all'autorizzazione CONNECT in SQL Server) nel warehouse o nell'endpoint di analisi SQL (livello di elemento). Gli utenti hanno anche bisogno di autorizzazioni granulari a livello di oggetto per leggere i dati da tabelle o viste specifiche. Per altre informazioni, vedere Sicurezza per il data warehousing in Microsoft Fabric.

Modelli di codice ed esempi

Usare una firma del metodo

Il comando seguente mostra la firma del synapsesql metodo per la richiesta di lettura. L'argomento in tre parti tableName è necessario per accedere a tabelle o viste da un warehouse e dall'endpoint di analisi SQL di un lakehouse. Aggiornare l'argomento con i nomi seguenti, in base allo scenario:

  • Parte 1: Nome del magazzino o del lakehouse.
  • Parte 2: Nome dello schema.
  • Parte 3: Nome della tabella o vista.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame

Leggere i dati all'interno della stessa area di lavoro

Importante

Eseguire queste istruzioni di importazione all'inizio del notebook o prima di iniziare a usare il connettore:

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

import org.apache.spark.sql.functions._

Il codice seguente è un esempio per leggere i dati da una tabella o vista in un dataframe Spark:

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

Il codice seguente è un esempio per leggere i dati da una tabella o vista in un dataframe Spark con un limite di conteggio delle righe pari a 10:

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

Il codice seguente è un esempio per leggere i dati da una tabella o una vista in un dataframe Spark dopo l'applicazione di un filtro:

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

Il codice seguente è un esempio per leggere i dati da una tabella o una vista in un dataframe Spark solo per le colonne selezionate:

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

Leggere i dati tra aree di lavoro

Per accedere e leggere i dati da un warehouse o una lakehouse tra aree di lavoro, è possibile specificare l'ID dell'area di lavoro in cui si trova il magazzino o il lakehouse. Questa riga fornisce un esempio di lettura dei dati da una tabella o di una vista in un dataframe Spark dal warehouse o dal lakehouse dall'ID dell'area di lavoro specificato:

import com.microsoft.spark.fabric.Constants
val df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")

Nota

Quando si esegue il notebook, per impostazione predefinita il connettore cerca il magazzino o la lakehouse specificato nell'area di lavoro della lakehouse collegata al notebook. Per fare riferimento a un magazzino o una lakehouse da un'altra area di lavoro, specificare l'ID dell'area di lavoro.

Usare dati materializzati tra celle e lingue

È possibile usare l'API del createOrReplaceTempView dataframe Spark per accedere ai dati recuperati in una cella o in Scala (dopo averlo registrato come visualizzazione temporanea) da un'altra cella in Spark SQL o PySpark. Queste righe di codice forniscono un esempio per leggere i dati da una tabella o una vista in un dataframe Spark in Scala e usare questi dati in Spark SQL e PySpark:

%%spark
spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").createOrReplaceTempView("<Temporary View Name>")

A questo punto, modificare la preferenza della lingua nel notebook o a livello di cella in Spark SQL e recuperare i dati dalla visualizzazione temporanea registrata:

%%sql
SELECT * FROM <Temporary View Name> LIMIT 100

Modificare quindi la preferenza del linguaggio nel notebook o a livello di cella in PySpark (Python) e recuperare i dati dalla visualizzazione temporanea registrata:

%%pyspark
df = spark.read.table("<Temporary View Name>")

Creare una tabella lakehouse basata sui dati di un warehouse

Queste righe di codice forniscono un esempio per leggere i dati da una tabella o vista in un dataframe Spark in Scala e usarli per creare una tabella lakehouse:

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

Risoluzione dei problemi

Al termine, il frammento di risposta di lettura viene visualizzato nell'output della cella. L'errore nella cella corrente annulla anche le successive esecuzioni di celle del notebook. Le informazioni dettagliate sugli errori sono disponibili nei log applicazioni Spark.

Limitazioni correnti

Attualmente, il connettore:

  • Supporta il recupero dei dati dai warehouse di infrastruttura e dagli endpoint di analisi SQL degli elementi lakehouse.
  • Supporta solo Scala.
  • Non supporta query personalizzate o pass-through di query.
  • Non implementa l'ottimizzazione push-down.
  • Mantiene la firma di utilizzo come quella fornita con Apache Spark per Azure Synapse Analytics per coerenza. Tuttavia, non è compatibile con le versioni precedenti per connettersi e usare un pool SQL dedicato in Azure Synapse Analytics.