Spark-kobling for Microsoft Fabric Data Warehouse
Spark-koblingen for Fabric Data Warehouse gjør det mulig for Spark-utviklere og dataforskere å få tilgang til og arbeide med data fra et lager og SQL Analytics-endepunktet til et lakehouse. Koblingen tilbyr følgende funksjoner:
- Du kan arbeide med data fra et lager- eller SQL-analyseendepunkt i samme arbeidsområde eller på tvers av flere arbeidsområder.
- Sql Analytics-endepunktet for et Lakehouse oppdages automatisk basert på arbeidsområdekontekst.
- Koblingen har en forenklet Spark API, abstraherer den underliggende kompleksiteten og opererer med bare én kodelinje.
- Når du har tilgang til en tabell eller en visning, opprettholder koblingen sikkerhetsmodeller som er definert på SQL-motornivå. Disse modellene inkluderer sikkerhet på objektnivå (OLS), sikkerhet på radnivå (RLS) og sikkerhet på kolonnenivå (CLS).
- Koblingen er forhåndsinstallert i fabric runtime, noe som eliminerer behovet for separat installasjon.
Merk
Koblingen er for øyeblikket i forhåndsvisning. Hvis du vil ha mer informasjon, kan du se gjeldende begrensninger senere i denne artikkelen.
Autentisering
Microsoft Entra-godkjenning er en integrert godkjenningstilnærming. Brukere logger seg på Microsoft Fabric-arbeidsområdet, og legitimasjonen sendes automatisk til SQL-motoren for godkjenning og godkjenning. Legitimasjonen tilordnes automatisk, og brukere kreves ikke for å angi bestemte konfigurasjonsalternativer.
Tillatelser
Hvis du vil koble til SQL-motoren, trenger brukerne minst lesetillatelse (lik CONNECT-tillatelse i SQL Server) på lageret eller SQL Analytics-endepunktet (elementnivå). Brukere trenger også detaljerte tillatelser på objektnivå for å lese data fra bestemte tabeller eller visninger. Hvis du vil ha mer informasjon, kan du se Sikkerhet for datalagring i Microsoft Fabric.
Kodemaler og eksempler
Bruke en metodesignatur
Følgende kommando viser synapsesql
metodesignaturen for leseforespørselen. Det tredelte tableName
argumentet er nødvendig for å få tilgang til tabeller eller visninger fra et lager og SQL Analytics-endepunktet til et lakehouse. Oppdater argumentet med følgende navn, basert på scenarioet:
- Del 1: Navnet på lageret eller lakehouse.
- Del 2: Navnet på skjemaet.
- Del 3: Navnet på tabellen eller visningen.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame
I tillegg til å lese fra en tabell eller visning direkte, lar denne koblingen deg også angi en egendefinert eller gjennomstrekingsspørring, som sendes til SQL-motoren, og resultatet returneres tilbake til Spark.
spark.read.option(Constants.DatabaseName, "<warehouse/lakeshouse name>").synapsesql("<T-SQL Query>") => org.apache.spark.sql.DataFrame
Selv om denne koblingen automatisk oppdager endepunktet for det angitte lageret / lakehouse, kan du gjøre det hvis du vil angi det eksplisitt.
//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>")
Lese data i samme arbeidsområde
Viktig
Kjør disse importsetningene i begynnelsen av notatblokken, eller før du begynner å bruke koblingen:
For Scala
import com.microsoft.spark.fabric.tds.implicits.read.FabricSparkTDSImplicits._
import com.microsoft.spark.fabric.Constants
For PySpark (Python)
import com.microsoft.spark.fabric
from com.microsoft.spark.fabric.Constants import Constants
Følgende kode er et eksempel på å lese data fra en tabell eller visning i en Spark DataFrame:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
Følgende kode er et eksempel på å lese data fra en tabell eller visning i en Spark DataFrame med en radantallgrense på 10:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").limit(10)
Følgende kode er et eksempel på å lese data fra en tabell eller visning i en Spark DataFrame etter at du har brukt et filter:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").filter("column name == 'value'")
Følgende kode er et eksempel på å lese data fra en tabell eller visning i en Spark DataFrame bare for valgte kolonner:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").select("column A", "Column B")
Les data på tvers av arbeidsområder
Hvis du vil ha tilgang til og lese data fra et lager eller et lakehouse på tvers av arbeidsområder, kan du angi arbeidsområde-ID-en der lageret eller lakehouse finnes, og deretter lakehouse eller lagerelement-ID. Følgende linje gir et eksempel på å lese data fra en tabell eller visning i en Spark DataFrame fra lageret eller lakehouse med angitt arbeidsområde-ID og lakehouse/warehouse-ID:
# 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>")
Merk
Når du kjører notatblokken, ser koblingen som standard etter det angitte lageret eller lakehouse i arbeidsområdet til lakehouse som er knyttet til notatblokken. Hvis du vil referere til et lager eller et lakehouse fra et annet arbeidsområde, angir du ID-en for arbeidsområdet og lakehouse- eller lagerelement-ID-en som ovenfor.
Opprette en lakehouse-tabell basert på data fra et lager
Disse kodelinjene gir et eksempel på å lese data fra en tabell eller visning i en Spark DataFrame og bruke den til å opprette en lakehouse-tabell:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
df.write.format("delta").saveAsTable("<Lakehouse table name>")
Feilsøk
Ved fullføring vises kodesnutten for lesesvar i cellens utdata. Feil i gjeldende celle avbryter også etterfølgende cellekjøringer av notatblokken. Detaljert feilinformasjon er tilgjengelig i Spark-programloggene.
Gjeldende begrensninger
For øyeblikket er koblingen:
- Støtter datahenting fra Fabric-lagre og SQL Analytics-endepunkter for lakehouse-elementer.
- Fabric DW støtter
Time Travel
nå, men denne koblingen fungerer ikke for en spørring med tidsreisesyntaks. - Beholder brukssignaturen som den som leveres med Apache Spark for Azure Synapse Analytics for konsekvens. Det er imidlertid ikke bakoverkompatibelt å koble til og arbeide med et dedikert SQL-utvalg i Azure Synapse Analytics.
- Kolonnenavn med spesialtegn behandles ved å legge til escape-tegn før spørringen, basert på navnet på tre deler av tabellen/visningen, sendes inn. I tilfelle en egendefinert eller direktespørring basert på lesing, kreves brukere for å unnslippe kolonnenavn som inneholder spesialtegn.