Spark-Datenquellen

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 query Option 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, dbtable und 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.