Spark-datakällor

Med Api:et för Spark-datakälla kan du läsa från och skriva till externa databaser direkt från Azure Databricks. Använd den bara när du behöver den fullständiga flexibiliteten i Spark-motorn, vill köra interna frågor på källan eller kräva skrivåtkomst till externa system. I allmänhet rekommenderar Azure Databricks styrd, skrivskyddad åtkomst med automatisk Spark- eller SQL-frågenedrullning. Se Vad är sökfrågefederation?.

Spark Data Source-API:et har specifika beteenden för anslutning, frågekörning och schemaidentifiering.

  • Den primära arbetsbelastningen och eventuella efterföljande Spark-transformeringar körs på Azure Databricks Spark-klustret.
  • När du använder query alternativet körs den angivna SQL-instruktionen helt på den externa datakällan. Spark hämtar resultatet utan att utföra transformeringsnedtryckning på frågesträngen.
  • Anslutningen kräver antingen en Azure Databricks paketerad anslutningsapp, en JDBC-drivrutin som tillhandahålls av användaren eller en anpassad PySpark-datakälla.
  • Spark läser automatiskt schemat från den externa databastabellen och mappar dess typer till Spark SQL-typer.

Använd en medföljande anslutningsapp

Databricks Runtime innehåller optimerade anslutningar för vanliga datakällor. Se Anslutningsprogram som medföljer för en fullständig lista.

Paketerade anslutningsappar använder host och port som separata alternativ i stället för en fullständig JDBC-URL-sträng.

Läsa data med hjälp av en direktfråga

Med alternativet query ser du till att filter- och kopplingslogik körs på källdatabasen innan data når Spark. För styrd läsåtkomst med automatisk frågenedtryckning och behörighetsdelegering i Unity Catalog via vyer bör du överväga fjärrfrågor i stället.

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

Skrivdata

Ange ett skrivläge med .mode() för att styra hur data skrivs. Använd append för att lägga till rader i en befintlig tabell eller overwrite för att ersätta dess innehåll.

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

Använda en JDBC UC-anslutning

Om en källspecifik anslutning inte medföljer, eller om du vill använda en specifik version av JDBC-drivrutinen, ska du använda en JDBC-anslutning för Unity Catalog. På så sätt kan du centralisera hantering av autentiseringsuppgifter och ta med din egen JDBC-drivrutin.

En JDBC Unity Catalog-anslutning ger flera fördelar jämfört med att använda en paketerad anslutningsapp eller rå JDBC-drivrutin direkt. Med en JDBC Unity Catalog-anslutning kan du:

  • Ta med din egen JDBC-drivrutins-JAR för alla databaser som stöder JDBC.
  • Skapa anslutningen en gång och återanvänd den i serverlösa, standard- och dedikerade kluster.
  • Använd styrd åtkomst till datakällan med hjälp av ett Unity Catalog-anslutningsobjekt.
  • Dölj autentiseringsuppgifterna för anslutningen från den frågande användaren.
  • Läsa från och skriva till externa databaser via Spark Data Source-API:et.

Om du vill använda en JDBC Unity Catalog-anslutning anger du databricks.connection i dina Spark-alternativ:

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

Installationsinstruktioner finns i JDBC-anslutning.

Använd en anpassad anslutning i dedikerade kluster

På dedikerade (klassiska) kluster kan du installera Spark-datakällskopplingar från tredje part eller JDBC-drivrutiner som inte medföljer Databricks Runtime.

Använd den här metoden när:

  • Du behöver en Spark-anslutningsapp från tredje part för system som MongoDB, Cassandra, Couchbase eller Elasticsearch.
  • Du behöver en specifik drivrutinsversion som inte ingår i körmiljön.
  • Du vill installera en JDBC-drivrutin direkt i klustret utan att konfigurera en Anslutning till Unity Catalog.

Installera ett anslutningsprogram eller en drivrutin

Installera biblioteket på klustret via Compute>ditt kluster>Bibliotek>Installera ny. Du kan använda Maven-koordinater direkt utan att ladda ned eller ladda upp några JAR:er. Starta om klustret så att biblioteket träder i kraft.

Läsa data

När anslutningsappen har installerats använder du anslutningsappens formatnamn och de anslutningsalternativ som krävs för att läsa data.

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

Skrivdata

Använd samma formatnamn och anslutningsalternativ för att skriva tillbaka data till källan.

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

Considerations

Tänk på följande när du använder anpassade anslutningsprogram i dedikerade kluster.

  • Drivrutinen eller anslutningsappen är endast tillgänglig i klustret där den är installerad.
  • Anpassade Spark-JAR:er från tredje part stöds inte i Databricks SQL-, serverlösa eller standardåtkomstlägeskluster. För dessa beräkningstyper använder du paketerade anslutningar eller JDBC-anslutningar till Unity Catalog.

Anpassade datakällor i PySpark

Med api:et Python DataSource kan du skapa anpassade dataanslutningar helt i Python, utan JAR eller JVM-baserade bibliotek. Använd detta när du behöver ansluta till REST-API:er, SaaS-program eller något system utan ett JDBC-gränssnitt eller när du vill generera syntetiska data programmatiskt. API:et stöder både batch- och direktuppspelningsläsningar och skrivningar.

Anmärkning

Anpassade PySpark-datakällor kräver Databricks Runtime 15.4 LTS eller senare.

För konfiguration, exempel och API-referens, se PySpark anpassade datakällor.

Jämföra integreringsstrategier

I följande tabell jämförs Spark Data Source-API:et med Lakehouse Federation och Lakeflow Connect för att hjälpa dig att välja rätt metod för ditt användningsfall.

Feature API för Spark-datakälla Lakehouse Federation Lakeflow Connect
Primärt användningsfall Komplex ETL, anpassad Spark-logik, direktfrågor Ad hoc-frågor, BI-rapportering Storskalig, automatiserad inmatning
Dataförflyttning Inläst i Spark-minne (tillfälliga) Inläst i Spark-minne (tillfälliga) Kopierad till Delta Lake (beständig)
Frågekörning Manuell nedtryckning med det inbyggda query-alternativet Automatisk nedtryckning av filter, sammanfogningar och aggregeringar i Spark och SQL Inte tillämpligt (fullständig tabellreplikering)
Governance Unity Catalog-anslutning (JDBC) eller hemliga omfång Unity Catalog (federerad katalog) Unity Catalog (hanterad pipeline)
Passar bäst för Avancerade användare som behöver full flexibilitet i Spark Minimera dataförflyttningar samtidigt som styrningen bevaras CDC- och inmatningspipelines i produktion

Anslutningar som medföljer och stöds

Följande datakällor paketeras i Databricks Runtime och kan anropas direkt via Spark. Läsningar och skrivningar stöds i dedikerade kluster och standardkluster.

Anmärkning

Skrivningar på serverlös beräkning stöds för PostgreSQL, SQL Server, MySQL, Snowflake och Redshift. Se alternativ för skrivning i serverlösa medföljande anslutningar för information om vilka anslutningsalternativ som stöds.

Datakälla spark.format() Namn
PostgreSQL "postgresql"
SQL Server "sqlserver"
MySQL och MariaDB "mysql"
Snöflinga "snowflake"
Amazon Redshift "redshift"
Google BigQuery (ett molnbaserat dataanalysverktyg) "bigquery"
Azure Synapse "SQLDW"
HTTP "http"

Limitations

Följande begränsningar gäller när du använder Spark Data Source-API:et i Azure Databricks.

  • Spark-alternativ för paketerade datakällor är begränsade till query, dbtableoch en liten uppsättning anslutningsspecifika alternativ.
  • Anpassade Spark-JAR:er från tredje part kan bara installeras på dedikerade kluster. För serverlösa eller standardkluster använder du medföljande kopplingar eller JDBC-anslutningar till Unity Catalog.
  • Anpassade PySpark-datakällor kräver Databricks Runtime 15.4 LTS eller senare.