共用方式為


使用適用於 SQL Server 和 Azure SQL 的 Apache Spark 連接器

Important

MICROSOFT SQL Server 2019 巨量數據叢集已淘汰。 SQL Server 2019 巨量數據叢集的支援已於 2025 年 2 月 28 日結束。 如需詳細資訊,請參閱 Microsoft SQL Server 平臺上的公告部落格文章和巨量數據選項。

適用於 SQL Server 和 Azure SQL 的 Apache Spark 連接器是高效能連接器,可讓您在巨量數據分析中使用事務數據,並保存特定查詢或報告的結果。 連接器可讓您使用任何 SQL 資料庫、內部部署或雲端,作為 Spark 作業的輸入資料源或輸出資料接收。 連接器使用 SQL Server 批量寫入 API。 任何批量寫入參數都可以由使用者傳遞為選擇性參數,並由連接器 as-is 傳遞至基礎 API。 如需大量寫入作業的詳細資訊,請參閱 使用 JDBC 驅動程式的大量複製

連接器預設包含在 SQL Server 巨量數據叢集中。

開放原始碼存放庫深入了解連接器。 如需範例,請參閱 範例

寫入新的 SQL 資料表

Caution

overwrite 模式中,連接器預設會先删除資料庫中已存在的資料表。 請謹慎使用此選項,以避免非預期的數據遺失。

在使用模式 overwrite 時,如果不使用選項 truncate,則在重新建立資料表時,索引將會遺失。 例如,列存儲數據表會變成堆積。 如果您想要維持現有索引,請同時指定具有truncate值的選項true。 例如 .option("truncate",true)

server_name = "jdbc:sqlserver://{SERVER_ADDR}"
database_name = "database_name"
url = server_name + ";" + "databaseName=" + database_name + ";"

table_name = "table_name"
username = "username"
password = "password123!#" # Please specify password here

try:
  df.write \
    .format("com.microsoft.sqlserver.jdbc.spark") \
    .mode("overwrite") \
    .option("url", url) \
    .option("dbtable", table_name) \
    .option("user", username) \
    .option("password", password) \
    .save()
except ValueError as error :
    print("Connector write failed", error)

附加至 SQL 資料表

try:
  df.write \
    .format("com.microsoft.sqlserver.jdbc.spark") \
    .mode("append") \
    .option("url", url) \
    .option("dbtable", table_name) \
    .option("user", username) \
    .option("password", password) \
    .save()
except ValueError as error :
    print("Connector write failed", error)

指定隔離等級

此連接器預設會在執行大量插入至資料庫時,使用READ_COMMITTED隔離等級。 如果您想要將此覆寫為另一個隔離等級,請使用 mssqlIsolationLevel 選項,如下所示。

    .option("mssqlIsolationLevel", "READ_UNCOMMITTED") \

從 SQL 資料表讀取

jdbcDF = spark.read \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .option("url", url) \
        .option("dbtable", table_name) \
        .option("user", username) \
        .option("password", password).load()

非活動目錄模式

在非 Active Directory 模式安全性中,每個使用者都有一個使用者名稱和密碼,必須在連接器具現化期間提供作為參數,才能執行讀取和/或寫入。

非 Active Directory 模式的連接器具現化範例如下。 在執行腳本之前,請將 ? 取代為您帳戶的值。

# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark" 

url = "jdbc:sqlserver://master-p-svc;databaseName=?;"
writer = df.write \ 
   .format(connector_type)\ 
   .mode("overwrite") 
   .option("url", url) \ 
   .option("user", ?) \ 
   .option("password",?) 
writer.save() 

Active Directory 模式

在 Active Directory 模式安全性中,在用戶產生密鑰索引標籤檔案之後,用戶必須在連接器具現化期間提供 principalkeytab 作為參數。

在此模式中,驅動程式會將keytab檔案載入個別的執行程式容器。 然後,執行程式會使用主體名稱和keytab來產生令牌,用來建立 JDBC 連接器以進行讀取/寫入。

Active Directory 模式的範例連接器具現化如下。 在執行腳本之前,請將 ? 取代為您帳戶的值。

# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark"

url = "jdbc:sqlserver://master-p-svc;databaseName=?;integratedSecurity=true;authenticationScheme=JavaKerberos;" 
writer = df.write \ 
   .format(connector_type)\ 
   .mode("overwrite") 
   .option("url", url) \ 
   .option("principal", ?) \ 
   .option("keytab", ?)   

writer.save() 

Next steps

如需有關巨量資料叢集的詳細資訊,請參閱如何在 Kubernetes 上部署 SQL Server 巨量資料叢集

SQL Server 巨量數據叢集是否有意見反應或功能建議? 請在 SQL Server 巨量數據叢集意見反應中留下附註