Del via


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.