Spark 資料來源

Spark Data Source API 讓你能直接從 Azure Databricks 讀取和寫入外部資料庫。 只有在需要 Spark 引擎的完整彈性、想對原始碼執行原生查詢,或需要寫入外部系統時才使用。 一般來說,Azure Databricks 建議採用受控、唯讀存取,並搭配自動 Spark 或 SQL 查詢推送。 請參閱查詢聯盟是什麼?

Spark Data Source API 在連接性、查詢執行及結構偵測方面有特定行為。

  • 主要工作負載及後續的 Spark 轉換皆在 Azure Databricks Spark 叢集上執行。
  • 使用該 query 選項時,指定的 SQL 語句會完全在外部資料來源上執行。 Spark 不對查詢字串執行轉換下推,直接取得結果。
  • 此連線需要 Azure Databricks 綁定的連接器、使用者提供的 JDBC 驅動程式,或是 PySpark 自訂資料來源。
  • Spark 會自動從外部資料庫資料表讀取結構,並將其型別映射到 Spark SQL 型別。

使用隨附的連接器

Databricks 執行時包含針對常見資料來源優化的連接器。 完整列表請參閱 支援的捆綁連接器

綁定連接器使用 hostport 作為獨立選項,而非完整的 JDBC URL 字串。

使用直通查詢讀取資料

使用此 query 選項可確保在資料抵達 Spark 前,過濾與連接邏輯在來源資料庫上執行。 若需要透過檢視支援自動查詢下推與 Unity Catalog 權限委派的受控讀取存取,請改為考慮使用 遠端查詢

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

寫入資料

指定一個寫入模式 .mode() ,以控制資料的寫入方式。 用於 append 新增資料列或 overwrite 替換現有資料表的內容。

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

使用 JDBC UC 連線

如果套件沒有附帶特定原始碼的連接器,或你想使用特定的 JDBC 驅動版本,請使用 JDBC Unity 目錄連線。 這樣你就能集中管理憑證,並自帶 JDBC 驅動程式。

JDBC Unity 目錄連接相較於直接使用捆綁連接器或原始 JDBC 驅動程式,有多項優勢。 透過 JDBC Unity 目錄連線,您可以:

  • 攜帶你自己的 JDBC 驅動程式 JAR,以支援任何支援 JDBC 的資料庫。
  • 建立一次連線後,可以在無伺服器、標準及專用叢集間重複使用。
  • 使用 Unity Catalog 連線物件,以受治理的方式存取資料來源。
  • 隱藏查詢使用者的連線憑證。
  • 透過 Spark Data Source API 從外部資料庫讀取與寫入。

要使用 JDBC Unity 目錄連線,請在 Spark 選項中指定 databricks.connection

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

關於設定說明,請參見 JDBC 連線

專用叢集使用自訂連接器

在專用(經典)叢集上,你可以安裝第三方的 Spark 資料來源連接器或 JDBC 驅動程式,這些都不是隨 Databricks Runtime 附帶的。

在下列情況下使用此方法:

  • 你需要第三方的 Spark 連接器來支援像 MongoDB、Cassandra、Couchbase 或 Elasticsearch 這類系統。
  • 你需要一個執行階段未隨附的特定驅動程式版本。
  • 你想直接在叢集上安裝 JDBC 驅動程式,而不必設定 Unity 目錄連線。

安裝連接器或驅動程式

透過運算>你的叢集>程式庫>安裝新的,在叢集上安裝程式庫。 你可以直接使用 Maven 座標,無需下載或上傳任何 JAR。 重新啟動叢集,這樣函式庫才會生效。

讀取資料

安裝完成連接器後,使用連接器的格式名稱及其所需的連接選項來讀取資料。

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

寫入資料

使用相同的格式名稱和連線選項來將資料寫回來源。

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

考慮事項

在專用叢集使用自訂連接器時,請留意以下幾點。

  • 驅動程式或連接器僅可在安裝它的叢集上使用。
  • 客製化第三方 Spark JAR 不支援 Databricks SQL、無伺服器或標準存取模式叢集。 對於這些運算類型,請使用捆綁連接器或 JDBC Unity 目錄連線。

PySpark 自訂資料來源

Python DataSource API 讓你完全用 Python 建立自訂資料連接器,不需要 JAR 或基於 JVM 的函式庫。 當你需要連接 REST API、SaaS 應用程式或任何沒有 JDBC 介面的系統,或是想用程式生成合成資料時,可以使用這個功能。 API 支援批次與串流讀寫。

備註

PySpark 自訂資料來源需要 Databricks Runtime 15.4 LTS 或以上的規格。

關於設定、範例及 API 參考,請參見 PySpark 自訂資料來源

比較整合策略

下表比較了 Spark Data Source API 與 Lakehouse Federation 及 Lakeflow Connect 的使用,幫助您選擇最適合您使用情境的方法。

特徵 / 功能 Spark 資料來源 API Lakehouse 同盟 Lakeflow Connect
主要使用情境 複雜的 ETL、自訂 Spark 邏輯、直通查詢 臨時查詢,BI 報告 大規模自動攝取
數據移動 載入至 Spark 記憶體(暫時性) 載入至 Spark 記憶體中(暫時性) 複製至三角洲湖(持續)
查詢執行 使用原生 query 選項手動下壓 Spark 與 SQL 篩選條件、聯結與彙總的自動下推 不適用(完整資料表複製)
Governance Unity Catalog 連線(JDBC)或祕密範圍 Unity 目錄(聯邦目錄) Unity Catalog(受管理的管線)
最適合用於 需要完整 Spark 彈性的高級用戶 在維持治理的同時,盡量減少資料流動 生產 CDC 與擷取流程

支援的隨附連接器

以下資料來源已整合於 Databricks Runtime 中,並可直接透過 Spark 呼叫。 專用及標準叢集皆支援讀寫功能。

備註

PostgreSQL、SQL Server、MySQL、Snowflake 和 Redshift 支援無伺服器運算的寫入。 請參閱內建連接器的無伺服器寫入選項,了解支援的連接器選項。

數據源 spark.format() 名稱
PostgreSQL "postgresql"
SQL Server "sqlserver"
MySQL 與 MariaDB "mysql"
Snowflake "snowflake"
Amazon Redshift "redshift"
谷歌 BigQuery "bigquery"
Azure Synapse "SQLDW"
HTTP "http"

Limitations

在 Azure Databricks 中使用 Spark Data Source API 時,以下限制適用。

  • 捆綁資料來源的 Spark 選項僅限於 querydbtable及一小部分連接器專用選項。
  • 客製化第三方 Spark JAR 只能安裝在專用叢集上。 對於無伺服器或標準叢集,請使用捆綁連接器或 JDBC Unity 目錄連線。
  • PySpark 自訂資料來源需要 Databricks Runtime 15.4 LTS 或以上的規格。