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 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:

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