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 integrato

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

Usa una connessione JDBC Unity Catalog

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.
  • Crea la connessione una volta e riutilizzala tra serverless, standard e calcolo dedicato.
  • 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.

Usa un connettore personalizzato su un calcolo dedicato

Sul calcolo dedicato (classico), puoi installare connettori di sorgenti dati Spark di terze parti o driver JDBC che non sono inclusi 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

Tieni a mente quanto segue quando usi connettori personalizzati su computazioni dedicate.

  • Il driver o il connettore è disponibile solo nel cluster in cui è installato.
  • I JAR Spark personalizzati di terze parti non sono supportati su Databricks SQL, su cluster serverless o su cluster di calcolo con 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 Federazione Lakehouse 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) Caricato 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 integrati supportati

Le origini dati seguenti vengono raggruppate in Databricks Runtime e possono essere chiamate direttamente tramite Spark. Le operazioni di lettura e scrittura sono supportate su risorse di calcolo dedicate 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"

Migra i carichi di lavoro JDBC di BigQuery per Databricks Runtime 20

A partire da Databricks Runtime 20, Databricks Runtime non include più il driver JDBC di BigQuery incluso. Databricks Runtime versione 19 e precedenti continuano a includere il driver. Questo cambiamento riguarda i carichi di lavoro classici di calcolo che utilizzano Spark JDBC con URL jdbc:bigquery: .

Per trovare i carichi di lavoro interessati, cerca nel loro codice e nella loro configurazione un URL jdbc:bigquery:. Questo percorso JDBC è separato dal connettore Google BigQuery incluso, che utilizza .format("bigquery") e rimane disponibile. Senza un driver JDBC di BigQuery installato, i carichi di lavoro interessati non riescono a essere eseguiti e restituiscono un errore di driver non trovato.

Prima di spostare un carico di lavoro interessato su Databricks Runtime 20 o successivo, scegli una delle seguenti opzioni:

Per informazioni sui driver disponibili su Google, consulta BigQuery ODBC e JDBC drivers.

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 JAR Spark personalizzati di terze parti possono essere installati solo su calcoli dedicati. Per il calcolo serverless o standard, usa connettori integrati o connessioni di Unity Catalog tramite JDBC.
  • Le sorgenti dati personalizzate di PySpark richiedono Databricks Runtime 15.4 LTS o versioni successive.