Freigeben über


Spark-Connector für Microsoft Fabric Data Warehouse

Der Spark-Connector für Fabric Data Warehouse ermöglicht Spark-Entwickler*innen und Data Scientists den Zugriff und die Arbeit mit Daten aus einem Warehouse und dem SQL-Analyseendpunkt eines Lakehouse. Der Connector bietet die folgenden Funktionen:

  • Sie können mit Daten aus einem Warehouse oder einem SQL-Analyseendpunkt in demselben Arbeitsbereich oder über mehrere Arbeitsbereiche hinweg arbeiten.
  • Der SQL-Analyseendpunkt eines Lakehouse wird basierend auf dem Kontext des Arbeitsbereichs automatisch ermittelt.
  • Der Konnektor bietet eine vereinfachte Spark-API, abstrahiert die zugrunde liegende Komplexität und arbeitet mit nur einer Codezeile.
  • Während Sie auf eine Tabelle oder eine Anzeige zugreifen, hält sich der Konnektor an die auf der Ebene der SQL-Engine definierten Sicherheitsmodelle. Zu diesen Modellen gehören Sicherheit auf Objektebene (Object-Level Security, OLS), Sicherheit auf Zeilenebene (Row-Level Security, RLS) und Sicherheit auf Spaltenebene (Column-Level Security, CLS).
  • Der Konnektor ist in der Fabric-Runtime-Umgebung vorinstalliert, so dass eine separate Installation nicht erforderlich ist.

Hinweis

Der Konnektor befindet sich derzeit in der Vorschauversion. Weitere Informationen finden Sie unter den aktuellen Einschränkungen weiter unten in diesem Artikel.

Authentifizierung

Die Microsoft Entra Authentifizierung ist ein integrierter Authentifizierungsansatz. Benutzer melden sich beim Microsoft Fabric-Arbeitsbereich an, und ihre Anmeldedaten werden automatisch zur Authentifizierung und Autorisierung an die SQL-Engine übergeben. Die Zugangsdaten werden automatisch zugewiesen, und die Benutzer müssen keine spezifischen Konfigurationsoptionen angeben.

Berechtigungen

Um eine Verbindung mit der SQL-Engine herzustellen, benötigen Benutzer mindestens Leseberechtigung (ähnlich wie CONNECT-Berechtigungen in SQL Server) im Warehouse oder SQL Analytics-Endpunkt (Elementebene). Benutzer benötigen außerdem granulare Berechtigungen auf Objektebene, um Daten aus bestimmten Tabellen oder Ansichten zu lesen. Weitere Informationen finden Sie unter Sicherheit für Data Warehousing in Microsoft Fabric.

Codevorlagen und Beispiele

Verwenden Sie eine Methodensignatur

Der folgende Befehl zeigt die synapsesql-Methodensignatur für die Leseanforderung. Das dreiteilige tableName-Argument ist für den Zugriff auf Tabellen oder Ansichten aus einem Warehouse und dem SQL-Analyseendpunkt eines Lakehouse erforderlich. Aktualisieren Sie das Argument mit den folgenden Namen, je nach Ihrem Szenario:

  • Teil 1: Name des Warehouse oder Lakehouse.
  • Teil 2: Name des Schemas.
  • Teil 3: Name der Tabelle oder der Ansicht.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame

Mit diesem Connector können Sie nicht nur direkt aus einer Tabelle oder Ansicht lesen, sondern auch eine benutzerdefinierte Abfrage oder eine Passthrough-Abfrage angeben, die an die SQL-Engine weitergeleitet wird und deren Ergebnis an Spark zurückgegeben wird.

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

Dieser Connector findet zwar automatisch den Endpunkt für das angegebene Warehouse/Lakehouse, aber wenn Sie ihn explizit angeben möchten, können Sie das tun.

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

Lesen von Daten innerhalb desselben Arbeitsbereichs

Wichtig

Führen Sie diese Importanweisungen zu Beginn Ihres Notebooks aus oder bevor Sie den Konnektor verwenden:

Für Scala

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

import com.microsoft.spark.fabric.Constants

Für PySpark (Python)

import com.microsoft.spark.fabric

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

Der folgende Code ist ein Beispiel zum Lesen von Daten aus einer Tabelle oder Ansicht in einem Spark-DataFrame:

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

Der folgende Code ist ein Beispiel zum Lesen von Daten aus einer Tabelle oder Ansicht in einem Spark-DataFrame mit einer Begrenzung der Zeilenanzahl auf 10:

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

Der folgende Code ist ein Beispiel zum Lesen von Daten aus einer Tabelle oder Ansicht in einem Spark-DataFrame nach Anwendung eines Filters:

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

Der folgende Code ist ein Beispiel zum Lesen von Daten aus einer Tabelle oder Ansicht in einem Spark-DataFrame für ausgewählte Spalten:

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

Lesen von Daten über Arbeitsbereiche hinweg

Um auf Daten aus einem Warehouse oder Lakehous über mehrere Arbeitsbereiche hinweg zuzugreifen und sie zu lesen, können Sie die Arbeitsbereich-ID angeben, in der Ihr Warehouse oder Lakehouse vorhanden ist, und dann die Element-ID des Lakehouse oder Warehouse. Die folgende Zeile bieten ein Beispiel zum Lesen von Daten aus einer Tabelle oder Ansicht in einem Spark-DataFrame aus dem Warehouse oder Lakehouse mit der angegebenen Arbeitsbereich-ID und 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>")

Hinweis

Wenn Sie das Notebook ausführen, sucht der Konnektor standardmäßig nach dem angegebenen Warehouse oder Lakehouse im Arbeitsbereich des Lakehouses, das mit dem Notebook verbunden ist. Um von einem anderen Arbeitsbereich aus auf ein Warehouse oder Lakehouse zu verweisen, geben Sie wie oben die Arbeitsbereich-ID und die Element-ID des Lakehouse oder Warehouse an.

Erstellen einer Lakehouse-Tabelle basierend auf Daten aus einem Warehouse

Diese Codezeilen bieten ein Beispiel zum Lesen von Daten aus einer Tabelle oder Ansicht in einem Spark-DataFrame und wie diese zum Erstellen einer Lakehouse-Tabelle verwendet werden können:

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

Problembehandlung

Nach Beendigung des Vorgangs erscheint der Leseantwortausschnitt in der Ausgabe der Zelle. Ein Fehlschlag in der aktuellen Zelle bricht auch die nachfolgenden Ausführungen des Notebooks ab. Detaillierte Fehlerinformationen sind in den Spark-Anwendungsprotokollen verfügbar.

Aktuelle Einschränkungen

Derzeit unterstützt der Konnektor:

  • den Abruf von Daten aus Fabric Warehouses und SQL-Analyseendpunkten von Lakehouse-Elementen.
  • Fabric DW unterstützt Time Travel jetzt, dieser Connector funktioniert jedoch nicht für eine Abfrage mit Zeitreisesyntax.
  • die Beibehaltung der Verwendungssignatur wie die mit Apache Spark für Azure Synapse Analytics gelieferte, um Konsistenz zu gewährleisten. Dennoch ist es nicht abwärtskompatibel, sich mit einem dedizierten SQL-Pool in Azure Synapse Analytics zu verbinden und damit zu arbeiten.
  • Spaltennamen mit Sonderzeichen werden durch Hinzufügen von Escape-Zeichen behandelt, bevor die Abfrage basierend auf dem 3-teiligen Tabellen-/Ansichtsnamen übermittelt wird. Im Falle eines benutzerdefinierten oder auf einer Passthrough-Abfrage basierenden Lesevorgangs müssen Benutzer Spaltennamen, die Sonderzeichen enthalten, ausblenden.