Delen via


Spark-connector voor Microsoft Fabric Synapse Data Warehouse

Met de Spark-connector voor Synapse Data Warehouse kunnen Spark-ontwikkelaars en -gegevenswetenschappers toegang krijgen tot en werken met gegevens uit een magazijn en het SQL-analyse-eindpunt van een lakehouse. De connector biedt de volgende mogelijkheden:

  • U kunt met gegevens werken vanuit een magazijn- of SQL-analyse-eindpunt in dezelfde werkruimte of in meerdere werkruimten.
  • Het SQL Analytics-eindpunt van een Lakehouse wordt automatisch gedetecteerd op basis van de werkruimtecontext.
  • De connector heeft een vereenvoudigde Spark-API, abstraheert de onderliggende complexiteit en werkt met slechts één regel code.
  • Terwijl u toegang hebt tot een tabel of weergave, behoudt de connector beveiligingsmodellen die zijn gedefinieerd op sql-engineniveau. Deze modellen omvatten beveiliging op objectniveau (OLS), beveiliging op rijniveau (RLS) en beveiliging op kolomniveau (CLS).
  • De connector is vooraf geïnstalleerd in de Fabric-runtime, waardoor er geen afzonderlijke installatie meer nodig is.

Notitie

De connector is momenteel beschikbaar als preview-versie. Zie de huidige beperkingen verderop in dit artikel voor meer informatie.

Verificatie

Microsoft Entra-verificatie is een geïntegreerde verificatiemethode. Gebruikers melden zich aan bij de Microsoft Fabric-werkruimte en hun referenties worden automatisch doorgegeven aan de SQL-engine voor verificatie en autorisatie. De referenties worden automatisch toegewezen en gebruikers hoeven geen specifieke configuratieopties op te geven.

Machtigingen

Om verbinding te maken met de SQL-engine hebben gebruikers ten minste leesmachtigingen nodig (vergelijkbaar met de MACHTIGING VERBINDING MAKEN in SQL Server) op het warehouse- of SQL Analytics-eindpunt (itemniveau). Gebruikers hebben ook gedetailleerde machtigingen op objectniveau nodig om gegevens uit specifieke tabellen of weergaven te kunnen lezen. Zie Beveiliging voor datawarehousing in Microsoft Fabric voor meer informatie.

Codesjablonen en voorbeelden

Een methodehandtekening gebruiken

De volgende opdracht toont de synapsesql methodehandtekening voor de leesaanvraag. Het driedelige tableName argument is vereist voor toegang tot tabellen of weergaven vanuit een magazijn en het SQL Analytics-eindpunt van een lakehouse. Werk het argument bij met de volgende namen, op basis van uw scenario:

  • Deel 1: Naam van het magazijn of lakehouse.
  • Deel 2: Naam van het schema.
  • Deel 3: Naam van de tabel of weergave.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame

Naast het rechtstreeks lezen vanuit een tabel of weergave, kunt u met deze connector ook een aangepaste of passthrough-query opgeven, die wordt doorgegeven aan de SQL-engine en het resultaat wordt geretourneerd naar Spark.

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

Hoewel deze connector automatisch het eindpunt voor het opgegeven magazijn/lakehouse detecteert, kunt u dit doen als u dit expliciet wilt opgeven.

//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>") 

Gegevens in dezelfde werkruimte lezen

Belangrijk

Voer deze importinstructies uit aan het begin van uw notebook of voordat u de connector gaat gebruiken:

Voor Scala

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

import com.microsoft.spark.fabric.Constants

Voor PySpark (Python)

import com.microsoft.spark.fabric

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

De volgende code is een voorbeeld van het lezen van gegevens uit een tabel of weergave in een Spark DataFrame:

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

De volgende code is een voorbeeld van het lezen van gegevens uit een tabel of weergave in een Spark DataFrame met een limiet voor het aantal rijen van 10:

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

De volgende code is een voorbeeld van het lezen van gegevens uit een tabel of weergave in een Spark DataFrame nadat u een filter hebt toegepast:

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

De volgende code is een voorbeeld van het lezen van gegevens uit een tabel of weergave in een Spark DataFrame voor geselecteerde kolommen:

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

Gegevens lezen in werkruimten

Als u gegevens wilt openen en lezen vanuit een datawarehouse of lakehouse in werkruimten, kunt u de werkruimte-id opgeven waar uw datawarehouse of lakehouse bestaat en vervolgens lakehouse- of datawarehouse-item-id. Deze regel bevat een voorbeeld van het lezen van gegevens uit een tabel of weergave in een Spark DataFrame vanuit het datawarehouse of lakehouse met de opgegeven werkruimte-id en lakehouse-/datawarehouse-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 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>")

Notitie

Wanneer u het notebook uitvoert, zoekt de connector standaard naar het opgegeven datawarehouse of lakehouse in de werkruimte van het lakehouse dat is gekoppeld aan het notebook. Als u wilt verwijzen naar een datawarehouse of lakehouse vanuit een andere werkruimte, geeft u de werkruimte-id en lakehouse- of datawarehouse-item-id op zoals hierboven.

Een Lakehouse-tabel maken op basis van gegevens uit een magazijn

Deze coderegels bieden een voorbeeld voor het lezen van gegevens uit een tabel of weergave in een Spark DataFrame en deze gebruiken om een lakehouse-tabel te maken:

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

Problemen oplossen

Na voltooiing wordt het leesantwoordfragment weergegeven in de uitvoer van de cel. Fout in de huidige cel annuleert ook volgende celuitvoeringen van het notitieblok. Gedetailleerde foutinformatie is beschikbaar in de Spark-toepassingslogboeken.

Huidige beperkingen

Momenteel is de connector:

  • Ondersteunt het ophalen van gegevens uit Fabric-magazijnen en SQL-analyse-eindpunten van Lakehouse-items.
  • Fabric DW ondersteunt Time Travel nu echter niet voor een query met syntaxis voor tijdreizen.
  • Behoudt de gebruikshandtekening, zoals de handtekening die wordt geleverd met Apache Spark voor Azure Synapse Analytics voor consistentie. Het is echter niet achterwaarts compatibel om verbinding te maken en te werken met een toegewezen SQL-pool in Azure Synapse Analytics.
  • Kolomnamen met speciale tekens worden verwerkt door escape-teken toe te voegen voordat de query, op basis van de tabel/weergavenaam van drie delen, wordt verzonden. In het geval van een leesbewerking op basis van aangepaste of passthrough-query's moeten gebruikers ontsnappen aan kolomnamen die speciale tekens bevatten.