Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit der Spark-Datenquellen-API können Sie direkt aus Azure Databricks aus externen Datenbanken lesen und schreiben. Verwenden Sie sie nur, wenn Sie die volle Flexibilität des Spark-Moduls benötigen, systemeigene Abfragen für die Quelle ausführen möchten oder Schreibzugriff auf externe Systeme benötigen. Im Allgemeinen empfiehlt Azure Databricks einen verwalteten, schreibgeschützten Zugriff mit automatischem Pushdown von Spark- oder SQL-Abfragen. Siehe Was ist Abfrageföderation?.
Die Spark-Datenquellen-API verfügt über spezifische Verhaltensweisen für Konnektivität, Abfrageausführung und Schemaerkennung.
- Die primäre Workload und alle nachfolgenden Spark-Transformationen werden im Azure Databricks Spark-Cluster ausgeführt.
- Bei Verwendung der
queryOption wird die angegebene SQL-Anweisung vollständig in der externen Datenquelle ausgeführt. Spark ruft die Ergebnisse ab, ohne einen Transformation-Pushdown auf die Abfragezeichenfolge anzuwenden. - Die Verbindung erfordert entweder einen in Azure Databricks enthaltenen Connector, einen vom Benutzer bereitgestellten JDBC-Treiber oder eine benutzerdefinierte PySpark-Datenquelle.
- Spark liest das Schema automatisch aus der externen Datenbanktabelle und ordnet die zugehörigen Typen Spark SQL-Typen zu.
Verwenden Sie einen im Paket enthaltenen Konnektor
Databricks Runtime enthält optimierte Konnektoren für gängige Datenquellen. Die vollständige Liste finden Sie unter Unterstützte gebündelte Konnektoren.
Gebündelte Konnektoren verwenden host und port als separate Optionen anstelle einer kompletten JDBC-URL.
Lesen von Daten mithilfe einer Pass-Through-Abfrage
Durch die Verwendung der query Option wird sichergestellt, dass filter- und join-Logik in der Quelldatenbank ausgeführt wird, bevor Die Daten Spark erreichen. Für kontrollierten Lesezugriff mit automatischem Abfrage-Pushdown und Unity Catalog-Berechtigungsdelegierung über Ansichten sollten Sie stattdessen Remoteabfragen in Betracht ziehen.
df = (spark.read
.format("sqlserver")
.option("host", "<your-sql-server-instance>.database.windows.net")
.option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
.option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
.option("database", "<database-name>")
.option("query", "SELECT id, name FROM users WHERE active = 1")
.load())
Daten schreiben
Geben Sie einen Schreibmodus an, mit .mode() dem gesteuert wird, wie Daten geschrieben werden. Verwenden Sie append, um Zeilen zu einer bestehenden Tabelle hinzuzufügen, oder overwrite, um ihren Inhalt zu ersetzen.
(df.write
.format("sqlserver")
.mode("overwrite")
.option("host", "<your-sql-server-instance>.database.windows.net")
.option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
.option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
.option("database", "<database-name>")
.option("dbtable", "<table-name>")
.save())
Verwenden Sie eine JDBC-UC-Verbindung
Wenn ein quellspezifischer Konnektor nicht enthalten ist oder Sie eine bestimmte JDBC-Treiberversion verwenden möchten, verwenden Sie eine JDBC-Unity-Catalog-Verbindung. So können Sie die Verwaltung von Zugangsdaten zentralisieren und Ihren eigenen JDBC-Treiber verwenden.
Eine JDBC-Unity-Catalog-Verbindung bietet gegenüber der direkten Verwendung eines gebündelten Konnektors oder eines reinen JDBC-Treibers mehrere Vorteile. Mit einer JDBC Unity Catalog-Verbindung können Sie:
- Verwenden Sie Ihr eigenes JDBC-Treiber-JAR für jede Datenbank, die JDBC unterstützt.
- Erstellen Sie die Verbindung einmal, und verwenden Sie sie in serverlosen, Standard- und dedizierten Clustern wieder.
- Nutzen Sie den gesteuerten Zugriff auf die Datenquelle mithilfe eines Unity Catalog-Verbindungsobjekts.
- Blenden Sie Verbindungsanmeldedaten vor dem abfragenden Benutzer aus.
- Lesen und Schreiben in externe Datenbanken über die Spark-Datenquellen-API.
Um eine JDBC Unity Catalog-Verbindung zu verwenden, geben Sie databricks.connection in Ihren Spark-Optionen an:
df = (spark.read
.format("jdbc")
.option("databricks.connection", "<connection-name>")
.option("query", "SELECT * FROM external_table")
.load())
Anweisungen zum Einrichten finden Sie unter JDBC-Verbindung.
Verwenden eines benutzerdefinierten Connectors auf dedizierten Clustern
Auf dedizierten (klassischen) Clustern können Sie Spark-Datenquellen-Connectors von Drittanbietern oder JDBC-Treiber installieren, die nicht mit Databricks Runtime gebündelt sind.
Verwenden Sie diesen Ansatz in folgenden Fällen:
- Sie benötigen einen Spark Connector eines Drittanbieters für Systeme wie MongoDB, Cassandra, Couchbase oder Elasticsearch.
- Sie benötigen eine bestimmte Treiberversion, die nicht in der Laufzeit gebündelt ist.
- Sie möchten einen JDBC-Treiber direkt auf dem Cluster installieren, ohne eine Unity Catalog-Verbindung einzurichten.
Installieren eines Connectors oder Treibers
Installieren Sie die Bibliothek auf Ihrem Cluster über Compute>your cluster>Libraries>Install new. Sie können Maven-Koordinaten direkt verwenden, ohne JARs herunterzuladen oder hochzuladen. Starten Sie den Cluster neu, damit die Bibliothek wirksam wird.
Daten lesen
Nachdem der Verbinder installiert wurde, verwenden Sie den Formatnamen des Verbinders und die erforderlichen Verbindungsoptionen, um Daten zu lesen.
df = (spark.read
.format("mongodb")
.option("connection.uri", "mongodb://<hostname>:27017")
.option("database", "<database-name>")
.option("collection", "<collection-name>")
.load())
Daten schreiben
Verwenden Sie denselben Formatnamen und die gleichen Verbindungsoptionen, um Daten zurück in die Quelle zu schreiben.
(df.write
.format("mongodb")
.mode("overwrite")
.option("connection.uri", "mongodb://<hostname>:27017")
.option("database", "<database-name>")
.option("collection", "<collection-name>")
.save())
Considerations
Beachten Sie folgendes, wenn Sie benutzerdefinierte Connectors auf dedizierten Clustern verwenden.
- Der Treiber oder Connector ist nur auf dem Cluster verfügbar, in dem er installiert ist.
- Benutzerdefinierte Spark-JARs von Drittanbietern werden in Databricks SQL-, serverlosen oder Standardzugriffsmodusclustern nicht unterstützt. Verwenden Sie für diese Computetypen gebündelte Konnektoren oder JDBC-Unity-Catalog-Verbindungen.
Benutzerdefinierte PySpark-Datenquellen
Mit der Python DataSource-API können Sie benutzerdefinierte Datenconnectors vollständig in Python erstellen, ohne JARs oder JVM-basierte Bibliotheken. Verwenden Sie dies, wenn Sie sich mit REST-APIs, SaaS-Anwendungen oder jedem System ohne JDBC-Schnittstelle verbinden müssen, oder wenn Sie synthetische Daten programmgesteuert generieren möchten. Die API unterstützt Sowohl Batch- als auch Streaminglese- und Schreibvorgänge.
Note
PySpark benutzerdefinierte Datenquellen erfordern Databricks Runtime 15.4 LTS oder höher.
Informationen zu Setup, Beispielen und API-Referenz finden Sie unter PySpark benutzerdefinierte Datenquellen.
Vergleichen von Integrationsstrategien
In der folgenden Tabelle wird die Spark Data Source-API mit Lakehouse Federation und Lakeflow Connect verglichen, um Ihnen bei der Auswahl des richtigen Ansatzes für Ihren Anwendungsfall zu helfen.
| Funktion | Spark-Datenquellen-API | Lakehouse-Verbund | Lakeflow Connect |
|---|---|---|---|
| Primärer Anwendungsfall | Komplexe ETL, benutzerdefinierte Spark-Logik, Pass-Through-Abfragen | Ad-hoc-Abfragen, BI-Berichte | Automatisierte Datenaufnahme in großem Maßstab |
| Datenbewegung | In den Spark-Speicher geladen (flüchtig) | In den Spark-Speicher geladen (flüchtig) | In Delta Lake kopiert (persistent) |
| Abfrageausführung | Manueller Pushdown mithilfe der nativen query-Option |
Automatisches Pushdown von Spark- und SQL-Filtern, Verknüpfungen und Aggregationen | Nicht zutreffend (vollständige Tabellenreplikation) |
| Governance | Unity Catalog-Verbindung (JDBC) oder Geheimnisbereiche | Unity-Katalog (Verbundkatalog) | Unity Catalog (verwaltete Pipeline) |
| Am besten geeignet für: | Fortgeschrittene Nutzer, die die volle Flexibilität von Spark benötigen | Minimieren der Datenverschiebung bei gleichzeitiger Beibehaltung der Governance | CDC- und Aufnahmepipelines in der Produktion |
Unterstützte mitgelieferte Konnektoren
Die folgenden Datenquellen werden in Databricks Runtime gebündelt und können direkt über Spark aufgerufen werden. Lese- und Schreibvorgänge werden in dedizierten und Standardclustern unterstützt.
Note
Schreibvorgänge auf serverlosem Compute werden für PostgreSQL, SQL Server, MySQL, Snowflake und Redshift unterstützt. Siehe Serverlose Schreiboptionen für gebündelte Connectors für unterstützte Connectoroptionen.
| Datenquelle |
spark.format() Name |
|---|---|
| PostgreSQL | "postgresql" |
| SQL Server | "sqlserver" |
| MySQL und MariaDB | "mysql" |
| Schneeflocke | "snowflake" |
| Amazon Redshift | "redshift" |
| Google BigQuery-Datenanalyseplattform | "bigquery" |
| Azure Synapse | "SQLDW" |
| HTTP | "http" |
Einschränkungen
Die folgenden Einschränkungen gelten für die Verwendung der Spark-Datenquellen-API in Azure Databricks.
- Spark-Optionen für gebündelte Datenquellen sind auf
query,dbtableund eine kleine Anzahl connectorspezifischer Optionen beschränkt. - Benutzerdefinierte Spark JARs von Drittanbietern können nur auf dedizierten Clustern installiert werden. Verwenden Sie für serverlose oder Standardcluster die gebündelten Konnektoren oder JDBC-Unity-Catalog-Verbindungen.
- PySpark benutzerdefinierte Datenquellen erfordern Databricks Runtime 15.4 LTS oder höher.