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 模式安全性中,在用戶產生密鑰索引標籤檔案之後,用戶必須在連接器具現化期間提供 principal 和 keytab 作為參數。
在此模式中,驅動程式會將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 巨量數據叢集意見反應中留下附註。