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.