Spark-gegevensbronnen

Met de Spark-gegevensbron-API kunt u rechtstreeks vanuit Azure Databricks lezen en schrijven naar externe databases. Gebruik deze alleen als u de volledige flexibiliteit van de Spark-engine nodig hebt, systeemeigen query's op de bron wilt uitvoeren of schrijftoegang tot externe systemen nodig hebt. Over het algemeen raadt Azure Databricks beheerde alleen-lezen-toegang aan, waarbij Spark- of SQL-query's automatisch worden doorgestuurd. Zie Wat is queryfederatie?.

De Spark-gegevensbron-API heeft specifiek gedrag voor connectiviteit, queryuitvoering en schemadetectie.

  • De primaire workload en eventuele volgende Spark-transformaties worden uitgevoerd op het Azure Databricks Spark-cluster.
  • Wanneer u de query optie gebruikt, wordt de opgegeven SQL-instructie volledig uitgevoerd op de externe gegevensbron. Spark haalt de resultaten op zonder pushdown van transformaties op de queryreeks uit te voeren.
  • Voor de verbinding is een Azure Databricks gebundelde connector, een door de gebruiker geleverd JDBC-stuurprogramma of een aangepaste PySpark-gegevensbron vereist.
  • Spark leest het schema automatisch uit de externe databasetabel en wijst de typen toe aan Spark SQL-typen.

Een gebundelde connector gebruiken

Databricks Runtime bevat geoptimaliseerde connectors voor algemene gegevensbronnen. Zie Ondersteunde gebundelde connectors voor de volledige lijst.

Gebundelde connectors gebruiken host en port als afzonderlijke opties in plaats van een volledige JDBC-URL-tekenreeks.

Gegevens lezen met behulp van een passthrough-query

Als u de query optie gebruikt, zorgt u ervoor dat filter- en joinlogica wordt uitgevoerd op de brondatabase voordat gegevens Spark bereiken. Voor beheerde leestoegang met automatische query-pushdown en delegatie van Unity Catalog-machtigingen via weergaven kunt u in plaats daarvan externe query's overwegen.

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())

Gegevens schrijven

Geef een schrijfmodus op waarmee .mode() u kunt bepalen hoe gegevens worden geschreven. Hiermee append voegt u rijen toe aan een bestaande tabel of overwrite vervangt u de inhoud ervan.

(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())

Een JDBC UC-verbinding gebruiken

Als een bronspecifieke connector niet is gebundeld of als u een specifieke versie van het JDBC-stuurprogramma wilt gebruiken, gebruikt u een JDBC Unity Catalog-verbinding. Hiermee kunt u referentiebeheer centraliseren en uw eigen JDBC-stuurprogramma gebruiken.

Een JDBC Unity Catalog-verbinding biedt verschillende voordelen ten opzichte van het rechtstreeks gebruik van een gebundelde connector of onbewerkt JDBC-stuurprogramma. Met een JDBC Unity Catalog-verbinding kunt u het volgende doen:

  • Gebruik je eigen JAR-bestand van het JDBC-stuurprogramma voor elke database die JDBC ondersteunt.
  • Maak de verbinding eenmaal en hergebruik deze in serverloze, standaard- en toegewezen clusters.
  • Gebruik beheerde toegang tot de gegevensbron met behulp van een Unity Catalog-verbindingsobject.
  • Verberg verbindingsreferenties voor de querygebruiker.
  • Lezen van en schrijven naar externe databases via de Spark-gegevensbron-API.

Als u een JDBC Unity Catalog-verbinding wilt gebruiken, geeft u databricks.connection op in uw Spark-opties:

df = (spark.read
  .format("jdbc")
  .option("databricks.connection", "<connection-name>")
  .option("query", "SELECT * FROM external_table")
  .load())

Zie JDBC-verbinding voor installatie-instructies.

Een aangepaste connector gebruiken in toegewezen clusters

Op toegewezen (klassieke) clusters kunt u externe Spark-gegevensbronconnectors of JDBC-stuurprogramma's installeren die niet zijn gebundeld met Databricks Runtime.

Gebruik deze methode wanneer:

  • U hebt een Spark-connector van derden nodig voor systemen zoals MongoDB, Cassandra, Couchbase of Elasticsearch.
  • U hebt een specifieke stuurprogrammaversie nodig die niet is gebundeld in de runtime.
  • U wilt een JDBC-stuurprogramma rechtstreeks op het cluster installeren zonder dat u een Unity Catalog-verbinding hoeft in te stellen.

Een connector of stuurprogramma installeren

Installeer de bibliotheek op uw cluster via Compute>your cluster>Libraries>Install new. U kunt Maven-coördinaten rechtstreeks gebruiken zonder eventuele JAR's te downloaden of te uploaden. Start het cluster opnieuw op zodat de bibliotheek van kracht wordt.

Gegevens lezen

Zodra de connector is geïnstalleerd, gebruikt u de indelingsnaam van de connector en de vereiste verbindingsopties om gegevens te lezen.

df = (spark.read
  .format("mongodb")
  .option("connection.uri", "mongodb://<hostname>:27017")
  .option("database", "<database-name>")
  .option("collection", "<collection-name>")
  .load())

Gegevens schrijven

Gebruik dezelfde indelingsnaam en verbindingsopties om gegevens terug te schrijven naar de bron.

(df.write
  .format("mongodb")
  .mode("overwrite")
  .option("connection.uri", "mongodb://<hostname>:27017")
  .option("database", "<database-name>")
  .option("collection", "<collection-name>")
  .save())

Considerations

Houd rekening met het volgende bij het gebruik van aangepaste connectors op toegewezen clusters.

  • Het stuurprogramma of de connector is alleen beschikbaar op het cluster waarop het is geïnstalleerd.
  • Aangepaste Spark JAR's van derden worden niet ondersteund in Databricks SQL-, serverloze of standaardtoegangsmodusclusters. Gebruik voor deze rekentypen gebundelde connectors of JDBC Unity Catalog-verbindingen.

Aangepaste gegevensbronnen van PySpark

Met de Python DataSource-API kunt u aangepaste gegevensconnectors volledig bouwen in Python, zonder JAR's of op JVM gebaseerde bibliotheken. Gebruik dit wanneer u verbinding moet maken met REST API's, SaaS-toepassingen of een systeem zonder een JDBC-interface of wanneer u programmatisch synthetische gegevens wilt genereren. De API ondersteunt zowel batch- als streaming-lees- en schrijfbewerkingen.

Note

Voor aangepaste pySpark-gegevensbronnen is Databricks Runtime 15.4 LTS of hoger vereist.

Zie Aangepaste gegevensbronnen van PySpark voor installatie, voorbeelden en API-naslaginformatie.

Integratiestrategieën vergelijken

In de volgende tabel wordt de Spark-gegevensbron-API vergeleken met Lakehouse Federation en Lakeflow Connect om u te helpen bij het kiezen van de juiste benadering voor uw use-case.

Eigenschap Spark-gegevensbron-API Lakehouse Federation Lakeflow Connect
Primaire gebruiksscenario Complexe ETL, aangepaste Spark-logica, passthrough-query's Ad-hocquery's, BI-rapportage Grootschalige, geautomatiseerde opname
Gegevensverplaatsing Geladen in Spark-geheugen (tijdelijk) Geladen in het Spark-geheugen (tijdelijk) Gekopieerd naar Delta Lake (permanent)
Query uitvoeren Handmatige pushdown met behulp van de systeemeigen query optie Automatisch doorschuiven van Spark- en SQL-filters, joinbewerkingen en aggregaties Niet van toepassing (volledige tabelreplicatie)
Governance Unity Catalog-verbinding (JDBC) of geheime bereiken Unity Catalog (federatieve catalogus) Unity Catalog (beheerde pijplijn)
Ideaal voor Hoofdgebruikers die volledige Spark-flexibiliteit nodig hebben Gegevensverplaatsing minimaliseren met behoud van governance Productie-CDC- en innamepijplijnen

Ondersteunde gebundelde connectoren

De volgende gegevensbronnen zijn gebundeld in Databricks Runtime en kunnen rechtstreeks worden aangeroepen via Spark. Lees- en schrijfbewerkingen worden ondersteund op toegewezen en standaardclusters.

Note

Schrijfbewerkingen op serverloze berekeningen worden ondersteund voor PostgreSQL, SQL Server, MySQL, Snowflake en Redshift. Zie serverloze schrijfopties voor gebundelde connectors voor ondersteunde connectoropties.

Gegevensbron spark.format() naam
PostgreSQL "postgresql"
SQL Server "sqlserver"
MySQL en MariaDB "mysql"
Sneeuwvlok "snowflake"
Amazon Redshift "redshift"
Google BigQuery "bigquery"
Azure Synapse "SQLDW"
HTTP "http"

Limitations

De volgende beperkingen gelden voor het gebruik van de Spark-gegevensbron-API in Azure Databricks.

  • Spark-opties voor gebundelde gegevensbronnen zijn beperkt tot query, dbtableen een kleine set connectorspecifieke opties.
  • Aangepaste Spark JAR's van derden kunnen alleen worden geïnstalleerd op toegewezen clusters. Gebruik voor serverloze of standaardclusters gebundelde connectors of JDBC Unity Catalog-verbindingen.
  • Voor aangepaste pySpark-gegevensbronnen is Databricks Runtime 15.4 LTS of hoger vereist.