Connettore Spark per Microsoft Fabric Data Warehouse
Il connettore Spark per Fabric 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 warehouse o un endpoint di Analisi SQL 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, riassume la complessità sottostante e funziona con una sola riga di codice.
- Mentre si accede a una tabella o a una vista, il connettore congferma i modelli di sicurezza definiti a livello di motore SQL. Questi modelli includono la protezione a livello di oggetto (OLS), la protezione a livello di riga (RLS) e la protezione a livello di colonna (CLS).
- Il connettore è preinstallato all'interno del runtime di Fabric, eliminando la necessità di un'installazione separata.
Nota
Questo connettore attualmente è in anteprima. Per ulteriori informazioni, vedere le limitazioni correnti, più avanti in questo articolo.
Autenticazione
L'autenticazione di Microsoft Entra ID è un approccio di autenticazione integrato. Gli utenti accedono all'area di lavoro di Microsoft Fabric e le loro credenziali vengono passate automaticamente al motore SQL per l'autenticazione e l'autorizzazione. Le credenziali vengono mappate automaticamente e non è necessario che l'utente fornisca opzioni di configurazione specifiche.
Autorizzazioni
Per connettersi al motore SQL, gli utenti devono disporre almeno dell'autorizzazione di lettura (simile all'autorizzazione CONNECT in SQL Server) per il warehouse o per l'endpoint di Analisi SQL (livello di elemento). Gli utenti devono disporre anche 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 ed esempi di codice
Usare un firma del metodo
Il comando seguente mostra la firma del metodo synapsesql
per la richiesta di lettura. L'argomento tableName
in tre parti è 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 warehouse o del lakehouse.
- Parte 2: nome dello schema.
- Parte 3: nome della tabella o della vista.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame
Oltre a leggere direttamente da una tabella o una vista, questo connettore consente anche di specificare una query personalizzata o pass-through che viene passata al motore SQL e il risultato viene restituito a Spark.
spark.read.option(Constants.DatabaseName, "<warehouse/lakeshouse name>").synapsesql("<T-SQL Query>") => org.apache.spark.sql.DataFrame
Anche se questo connettore individua automaticamente l'endpoint per il warehouse/lakehouse specificato, è possibile anche specificarlo in modo esplicito.
//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>")
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:
Per Scala
import com.microsoft.spark.fabric.tds.implicits.read.FabricSparkTDSImplicits._
import com.microsoft.spark.fabric.Constants
Per PySpark (Python)
import com.microsoft.spark.fabric
from com.microsoft.spark.fabric.Constants import Constants
Il codice seguente è un esempio per leggere i dati da una tabella o una vista in un DataFrame Spark:
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 una vista in un DataFrame Spark con un numero limite di righe pari a 10:
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:
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:
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 la lakehouse e quindi l'ID dell'articolo del magazzino. La riga seguente fornisce un esempio di lettura dei dati da una tabella o vista in un dataframe Spark dal warehouse o lakehouse con l'ID area di lavoro e lakehouse/warehouse specificati:
# 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 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, "<warehouse item id>").synapsesql("<warehouse 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 area di lavoro e lakehouse o l'ID articolo del magazzino come indicato in precedenza.
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 una vista in un dataframe Spark e usarli per creare una tabella lakehouse:
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 appare nell'output della cella. Un errore nella cella corrente annulla anche le esecuzioni delle celle successive del notebook. Informazioni dettagliate sugli errori sono disponibili nei log dell’applicazione Spark.
Limitazioni correnti
Attualmente il connettore:
- Supporta il recupero dei dati dai warehouse di Fabric e dagli endpoint di Analisi SQL degli elementi lakehouse.
- Fabric DW ora supporta
Time Travel
, ma questo connettore non funziona per una query con sintassi di spostamento cronologico. - 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.
- I nomi colonna con caratteri speciali verranno gestiti aggiungendo un carattere di escape prima dell’invio della query, in base al nome della tabella/vista in 3 parti. In caso di lettura basata su query personalizzata o pass-through, gli utenti devono eseguire l'escape dei nomi colonna contenenti caratteri speciali.