Origini dati Spark

L'API origine dati Spark consente di leggere e scrivere in database esterni direttamente da Azure Databricks. Usalo solo quando hai bisogno della massima flessibilità del motore Spark, vuoi eseguire query native sull'origine o hai bisogno dell'accesso in scrittura ai sistemi esterni. In generale, Azure Databricks consiglia un accesso governato in sola lettura con pushdown automatico delle query Spark o SQL. Vedi Che cos'è la federazione delle query?.

L'API origine dati Spark presenta comportamenti specifici per la connettività, l'esecuzione di query e il rilevamento dello schema.

  • Il carico di lavoro primario e le successive trasformazioni Spark vengono eseguite nel cluster Spark Azure Databricks.
  • Quando si usa l'opzione query , l'istruzione SQL specificata viene eseguita interamente nell'origine dati esterna. Spark recupera i risultati senza eseguire il pushdown delle trasformazioni sulla stringa di query.
  • La connessione richiede un connettore in bundle Azure Databricks, un driver JDBC fornito dall'utente o un'origine dati personalizzata PySpark.
  • Spark legge automaticamente lo schema dalla tabella di database esterna ed esegue il mapping dei relativi tipi ai tipi SPARK SQL.

Usa un connettore incluso

Databricks Runtime include connettori ottimizzati per origini dati comuni. Per l'elenco completo, vedere Connettori inclusi supportati.

I connettori in bundle usano host e port come opzioni separate anziché una stringa URL JDBC completa.

Leggi i dati tramite una query pass-through

L'uso dell'opzione query garantisce che la logica di filtro e join venga eseguita nel database di origine prima che i dati raggiungano Spark. Per un accesso in lettura soggetto a governance, con pushdown automatico delle query e delega delle autorizzazioni di Unity Catalog tramite viste, valuta invece query remote.

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

Scrivere dati

Specificare una modalità di scrittura con .mode() per controllare la modalità di scrittura dei dati. Utilizzare append per aggiungere righe a una tabella esistente o overwrite per sostituirne il contenuto.

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

Usare una connessione JDBC UC

Se un connettore specifico per l'origine dati non è fornito in bundle, oppure se si desidera utilizzare una versione specifica del driver JDBC, usare una connessione JDBC di Unity Catalog. In questo modo è possibile centralizzare la gestione delle credenziali e usare il driver JDBC personalizzato.

Una connessione del catalogo Unity di JDBC offre diversi vantaggi rispetto all'uso diretto di un connettore in bundle o di un driver JDBC non elaborato. Con una connessione al catalogo Unity di JDBC, è possibile:

  • Usa il tuo file JAR del driver JDBC per qualsiasi database con supporto JDBC.
  • Creare la connessione una sola volta e riutilizzarla tra cluster serverless, standard e dedicati.
  • Utilizzare l'accesso controllato alla fonte dati usando un oggetto di connessione di Unity Catalog.
  • Nascondere le credenziali di connessione dall'utente che esegue query.
  • Leggere da e scrivere in database esterni tramite l'API Spark Data Source.

Per usare una connessione al catalogo Unity di JDBC, specificare databricks.connection nelle opzioni di Spark:

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

Per istruzioni sull'installazione, vedere Connessione JDBC.

Usare un connettore personalizzato in cluster dedicati

Nei cluster dedicati (classici) è possibile installare connettori di origine dati Spark di terze parti o driver JDBC non aggregati con Databricks Runtime.

Usare questo approccio quando:

  • È necessario un connettore Spark di terze parti per sistemi come MongoDB, Cassandra, Couchbase o Elasticsearch.
  • È necessaria una versione specifica del driver che non è inclusa nel runtime.
  • Si vuole installare un driver JDBC direttamente nel cluster senza configurare una connessione al catalogo Unity.

Installare un connettore o un driver

Installa la libreria sul tuo cluster tramite Elaborazione>il tuo cluster>Librerie>Installa nuova. È possibile usare le coordinate Maven direttamente senza scaricare o caricare file JAR. Riavviare il cluster per rendere effettiva la libreria.

Leggi i dati

Dopo aver installato il connettore, usare il nome del formato del connettore e le relative opzioni di connessione necessarie per leggere i dati.

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

Scrivere dati

Usare lo stesso nome di formato e le stesse opzioni di connessione per scrivere nuovamente i dati nell'origine.

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

Considerazioni

Quando si usano connettori personalizzati in cluster dedicati, tenere presente quanto segue.

  • Il driver o il connettore è disponibile solo nel cluster in cui è installato.
  • I jar Spark personalizzati di terze parti non sono supportati nei cluster databricks SQL, serverless o in modalità di accesso standard. Per questi tipi di calcolo, usare connettori in bundle o connessioni del catalogo Unity JDBC.

Origini dati personalizzate PySpark

L'API datasource Python consente di creare connettori dati personalizzati interamente in Python, senza jar o librerie basate su JVM. Usare questa opzione quando è necessario connettersi alle API REST, alle applicazioni SaaS o a qualsiasi sistema senza un'interfaccia JDBC o quando si vogliono generare dati sintetici a livello di codice. L'API supporta sia letture batch che operazioni di streaming e scritture.

Note

Le sorgenti dati personalizzate di PySpark richiedono Databricks Runtime 15.4 LTS o versioni successive.

Per informazioni di configurazione, esempi e informazioni di riferimento sulle API, vedere Origini dati personalizzate pySpark.

Confrontare le strategie di integrazione

La tabella seguente confronta l'API origine dati Spark con Lakehouse Federation e Lakeflow Connect per facilitare la scelta dell'approccio appropriato per il caso d'uso.

Caratteristica / Funzionalità API origine dati Spark Lakehouse Federation Lakeflow Connect
Caso d'uso principale ETL complesso, logica Spark personalizzata, query pass-through Interrogazioni ad hoc, reportistica BI Inserimento automatizzato su larga scala
Trasferimento di dati Caricato nella memoria di Spark (temporanea) Caricata nella memoria di Spark (temporanea) Copiato in Delta Lake (permanente)
Esecuzione della query Discesa manuale mediante l'opzione nativa query Pushdown automatico di filtri Spark e SQL, join e aggregazioni Non applicabile (replica completa della tabella)
Governance Connessione a Unity Catalog (JDBC) o ambiti segreti Catalogo Unity (catalogo federato) Unity Catalog (pipeline gestita)
Migliore per Utenti esperti che necessitano della piena flessibilità di Spark Riduzione al minimo dello spostamento dei dati mantenendo al tempo stesso la governance Pipeline di inserimento e CDC di produzione

Connettori inclusi nel pacchetto supportati

Le origini dati seguenti vengono raggruppate in Databricks Runtime e possono essere chiamate direttamente tramite Spark. Le letture e le scritture sono supportate sui cluster dedicati e standard.

Note

Le operazioni di scrittura in ambiente serverless sono supportate per PostgreSQL, SQL Server, MySQL, Snowflake e Redshift. Consulta Opzioni di scrittura serverless per i connettori inclusi per le opzioni del connettore supportate.

L'origine dei dati spark.format() nome
PostgreSQL "postgresql"
SQL Server "sqlserver"
MySQL e MariaDB "mysql"
Snowflake "snowflake"
Amazon Redshift "redshift"
Google BigQuery "bigquery"
Azure Synapse "SQLDW"
HTTP "http"

Limitations

Quando si usa l'API origine dati Spark in Azure Databricks, si applicano le limitazioni seguenti.

  • Le opzioni Spark per le origini dati in bundle sono limitate a query, dbtablee un piccolo set di opzioni specifiche del connettore.
  • I file JAR Spark personalizzati di terze parti possono essere installati solo in cluster dedicati. Per i cluster serverless o standard, utilizzare i connettori inclusi o le connessioni JDBC di Unity Catalog.
  • Le fonti di dati personalizzate di PySpark richiedono Databricks Runtime 15.4 LTS o versioni successive.