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 gebündelten Stecker
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 Unity Catalog-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.
- Stellen Sie die Verbindung einmal her und verwenden Sie sie über serverlose, Standard- und dedizierte Rechenleistungen 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 Sie einen benutzerdefinierten Connector auf dedizierten Rechenressourcen
Auf dediziertem (klassischem) Compute kannst du Spark-Datenquellen-Connectoren 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
Behalte Folgendes im Hinterkopf, wenn du benutzerdefinierte Connectors für dedizierte Rechenleistungen verwendest.
- Der Treiber oder Connector ist nur auf dem Cluster verfügbar, in dem er installiert ist.
- Benutzerdefinierte Drittanbieter-Spark JARs werden in Databricks SQL, serverless oder im Standardzugriffsmodus 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 gebündelte Stecker
Die folgenden Datenquellen werden in Databricks Runtime gebündelt und können direkt über Spark aufgerufen werden. Lese- und Schreibvorgänge werden auf dedizierten und Standard-Compute-Instanzen 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" |
Migrierung von BigQuery-JDBC-Workloads für Databricks Runtime 20
Ab Databricks Runtime 20 enthält Databricks Runtime nicht mehr den mitgelieferten BigQuery JDBC-Treiber. Databricks Runtime 19 und frühere Versionen enthalten weiterhin den Treiber. Diese Änderung betrifft klassische Compute-Workloads, die Spark JDBC mit URL jdbc:bigquery: verwenden.
Um betroffene Workloads zu finden, suchen Sie in deren Code und Konfiguration nach einer jdbc:bigquery: URL. Dieser JDBC-Pfad ist getrennt vom mitgelieferten Google BigQuery-Connector, der verwendet .format("bigquery") und weiterhin verfügbar ist. Ohne einen installierten BigQuery-JDBC-Treiber schlagen betroffene Workloads mit einem Fehler "Treiber nicht gefunden" fehl.
Bevor Sie eine betroffene Arbeitslast auf Databricks Runtime 20 oder später verschieben, wählen Sie eine der folgenden Optionen:
- Für schreibgeschützte Workloads verwenden Sie Lakehouse Federation, um BigQuery über einen externen Katalog abzufragen.
- Ersetzen Sie die Spark JDBC-Lese- und Schreibvorgänge durch den mitgelieferten Google BigQuery-Connector. Siehe Verwenden eines gebündelten Connectors und Unterstützte gebündelte Connectoren.
- Verwenden Sie eine JDBC Unity Catalog-Verbindung mit Ihrem eigenen BigQuery JDBC-Treiber.
- Bei dediziertem Classic Compute installiere deinen eigenen BigQuery-JDBC-Treiber.
- Behalte die Arbeitslast auf Databricks Runtime 19 oder früher, bis du eine dieser Änderungen abgeschlossen hast.
Informationen zu den von Google verfügbaren Treibern finden Sie unter BigQuery ODBC und JDBC Treiber.
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 Drittanbieter-Spark JARs können nur auf dediziertem Compute installiert werden. Für serverlose oder Standard-Rechenleistung verwenden Sie gebündelte Connectors oder JDBC Unity Catalog-Verbindungen.
- PySpark benutzerdefinierte Datenquellen erfordern Databricks Runtime 15.4 LTS oder höher.