Spark-Konnektor für Microsoft Fabric Synapse Data Warehouses
Der Spark-Konnektor für Synapse Data Warehouses ermöglicht Spark-Entwicklern und Datenwissenschaftlern den Zugriff auf 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 Data Warehouse oder Lakehouse über Arbeitsbereiche hinweg zuzugreifen und diese zu lesen, können Sie die Arbeitsbereichs-ID, in der Ihr Data Warehouse oder Lakehouse existiert, und dann die Lakehouse- oder Data Warehouse-Element-ID angeben. In dieser Zeile sehen Sie ein Beispiel für das Lesen von Daten aus einer Tabelle oder Ansicht in einem Spark DataFrame aus dem Data Warehouse oder Lakehouse mit der angegebenen Arbeitsbereichs-ID und Lakehouse/Data 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 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>")
Hinweis
Wenn Sie das Notebook ausführen, sucht der Konnektor standardmäßig nach dem angegebenen Data Warehouse oder Lakehouse im Arbeitsbereich des Lakehouses, das mit dem Notebook verbunden ist. Um ein Data Warehouse oder Lakehouse von einem anderen Arbeitsbereich aus zu referenzieren, geben Sie die ID des Arbeitsbereichs und die Objekt-ID des Lakehouse oder Data Warehouse wie oben beschrieben an.
Erstellen einer Lakehouse-Tabelle basierend auf Daten aus einem Warehouse
Diese Codezeilen stellen ein Beispiel zum Lesen von Daten aus einer Tabelle oder Ansicht in einem Spark DataFrame bereit und verwenden sie zum Erstellen einer Lakehouse-Tabelle:
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.