連接數據磚和Azure突觸與混合基(遺留)

重要的

這個文檔已經退休了,可能不會被更新。產品、服務或技術中提到的這些內容不再支持。看到在Azure突觸分析查詢數據

磚建議使用默認值複製功能與Azure數據存儲Gen2湖Azure突觸連接。本文包括遺留文檔在混合基和blob存儲。

Azure突觸分析(原SQL數據倉庫)是一個基於雲計算的企業數據倉庫,利用大規模並行處理(MPP)快速運行複雜的查詢在pb的數據。使用Azure作為大數據解決方案的一個關鍵組成部分。大數據導入到Azure和簡單混合基t - sql查詢,或複製聲明中,然後使用MPP高性能運行分析的力量。整合和分析,數據倉庫將成為真理的單一版本您的業務可以依靠的見解。

您可以訪問Azure從磚使用Azure突觸的突觸連接器,Apache火花,它使用一個數據源的實現Azure Blob存儲、混合基或複製聲明Azure突觸傳遞大量數據高效磚集群和Azure突觸之間的實例。

磚集群和Azure突觸實例訪問常見Blob存儲容器這兩個係統之間交換數據。在磚,Apache火花工作引發的Azure突觸連接器讀和寫數據到數據Blob存儲容器。在Azure突觸端,數據加載和卸載操作由混合基由Azure引發突觸通過JDBC連接器。在磚運行時的7.0及以上,複製默認情況下用於數據加載到Azure Azure突觸的突觸通過JDBC連接器。

請注意

複製隻有在Azure突觸Gen2實例,提供嗎更好的性能。如果您的數據庫仍然使用Gen1實例,我們建議您將數據庫遷移到代。

Azure突觸連接器比交互式查詢更適合ETL,因為每個查詢執行可以提取Blob存儲大量的數據。如果你計劃來執行多個查詢相同的Azure突觸表,我們建議您保存拚花等提取的數據的格式。

需求

一個Azure突觸數據庫的主鍵

身份驗證

Azure突觸連接器使用三種類型的網絡連接:

  • 引發司機Azure突觸

  • 火花司機和執行人Azure存儲賬戶

  • Azure突觸Azure存儲賬戶

┌─────────┐┌─────────────────────────>存儲││<────────────────────────┐│存儲acc鍵/││帳戶存儲acc鍵/││管理服務ID /└─────────┘OAuth 2.0 /│││││││││存儲acc鍵/│││OAuth 2.0 /││││v v┌──────v────┐┌──────────┐┌──────────┐│┌──────────┴┐突觸│││火花│││火花│││分析<────────────────────>││司機<───────────────>│執行人│└──────────┘JDBC與└──────────┘配置└───────────┘用戶名&密碼/火花

以下部分描述每個連接的身份驗證配置選項。

引發司機Azure突觸

火花驅動程序可以連接到Azure突觸與用戶名和密碼使用JDBC或OAuth 2.0服務主體進行身份驗證。

用戶名和密碼

我們建議您使用Azure門戶提供的連接字符串為身份驗證類型,這使安全套接字層(SSL)加密所有數據發送火花司機和Azure突觸之間通過JDBC連接實例。啟用了SSL加密驗證,你可以搜索加密= true在連接字符串。

允許火花司機到Azure突觸,我們建議您設置允許Azure服務和資源來訪問這個工作區網絡麵板下安全的Azure突觸通過Azure門戶工作區。此設置允許通信從所有Azure Azure IP地址和子網,它允許火花司機到Azure突觸實例。

OAuth 2.0服務主體

你可以驗證Azure突觸分析使用一個服務主體與訪問底層存儲賬戶。使用的更多信息服務主體的憑證訪問一個Azure存儲賬戶,明白了訪問數據存儲Gen2湖和Blob存儲Azure。你必須設置enableServicePrincipalAuth選項真正的在連接配置參數使連接器與一個服務主體進行身份驗證。

您可以選擇使用不同的服務主體的Azure突觸連接的分析。一個示例,該示例配置服務主體的憑證存儲賬戶和可選的服務主體為突觸憑證:

;定義服務主體的憑證Azure存儲賬戶fs.azure.account.auth。OAuth類型fs.azure.account.oauth.provider。類型org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProviderfs.azure.account.oauth2.client。id <應用程序id >fs.azure.account.oauth2.client。秘密< service-credential >fs.azure.account.oauth2.client。端點https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌;定義一個單獨的服務主體的憑證Azure突觸分析(如果沒有定義,連接器將使用Azure存儲帳戶憑據)spark.databricks.sqldw.jdbc.service.principal.client。id <應用程序id >spark.databricks.sqldw.jdbc.service.principal.client。秘密< service-credential >
/ /定義服務主體的憑證Azure存儲賬戶火花相依(“fs.azure.account.auth.type”,“OAuth”)火花相依(“fs.azure.account.oauth.provider.type”,“org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider”)火花相依(“fs.azure.account.oauth2.client.id”,“<應用程序id >”)火花相依(“fs.azure.account.oauth2.client.secret”,“< service-credential >”)火花相依(“fs.azure.account.oauth2.client.endpoint”,“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”)/ /定義一個單獨的服務主體的憑證Azure突觸分析(如果沒有定義,連接器將使用Azure存儲帳戶憑據)火花相依(“spark.databricks.sqldw.jdbc.service.principal.client.id”,“<應用程序id >”)火花相依(“spark.databricks.sqldw.jdbc.service.principal.client.secret”,“< service-credential >”)
#定義服務主體的憑證Azure存儲賬戶火花相依(“fs.azure.account.auth.type”,“OAuth”)火花相依(“fs.azure.account.oauth.provider.type”,“org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider”)火花相依(“fs.azure.account.oauth2.client.id”,“<應用程序id >”)火花相依(“fs.azure.account.oauth2.client.secret”,“< service-credential >”)火花相依(“fs.azure.account.oauth2.client.endpoint”,“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”)#定義一套獨立的服務主體的憑證Azure突觸分析(如果沒有定義,連接器將使用Azure存儲帳戶憑據)火花相依(“spark.databricks.sqldw.jdbc.service.principal.client.id”,“<應用程序id >”)火花相依(“spark.databricks.sqldw.jdbc.service.principal.client.secret”,“< service-credential >”)
#負載SparkR圖書館(SparkR)相依< -sparkR.callJMethod(sparkR.session(),“配置”)#定義服務主體的憑證Azure存儲賬戶sparkR.callJMethod(相依,“設置”,“fs.azure.account.auth.type”,“OAuth”)sparkR.callJMethod(相依,“設置”,“fs.azure.account.oauth.provider.type”,“org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider”)sparkR.callJMethod(相依,“設置”,“fs.azure.account.oauth2.client.id”,“<應用程序id >”)sparkR.callJMethod(相依,“設置”,“fs.azure.account.oauth2.client.secret”,“< service-credential >”)sparkR.callJMethod(相依,“設置”,“fs.azure.account.oauth2.client.endpoint”,“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”)#定義一套獨立的服務主體的憑證Azure突觸分析(如果沒有定義,連接器將使用Azure存儲帳戶憑據)sparkR.callJMethod(相依,“設置”,“spark.databricks.sqldw.jdbc.service.principal.client.id”,“<應用程序id >”)sparkR.callJMethod(相依,“設置”,“spark.databricks.sqldw.jdbc.service.principal.client.secret”,“< service-credential >”)

火花司機和執行人Azure存儲賬戶

Azure存儲容器充當中介時存儲大量數據讀取或寫入Azure突觸。火花連接到ADLS Gen2或Blob存儲使用abfss司機。

以下身份驗證選項可用:

下麵的例子說明了這兩種方法使用存儲帳戶訪問鍵的方法。這同樣適用於OAuth 2.0配置。

筆記本會話配置(首選)

使用這種方法,該帳戶訪問密鑰在會話中設置配置的筆記本運行命令。這個配置不影響其他筆記本連接到相同的集群。火花SparkSession對象提供的筆記本。

火花相依(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)

全球Hadoop配置

這種方法更新全球Hadoop相關配置SparkContext對象由所有筆記本共享。

schadoopConfiguration(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)

hadoopConfiguration不暴露在所有版本的PySpark。雖然下麵的命令依靠一些火花內部,它應該與所有PySpark版本和在未來不太可能打破或改變:

sc_jschadoopConfiguration()(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)

Azure突觸Azure存儲賬戶

Azure突觸也連接到一個存儲賬戶在裝卸的臨時數據。

如果你建立了一個賬戶的關鍵和秘密存儲賬戶,您可以設置forwardSparkAzureStorageCredentials真正的,在這種情況下,Azure突觸連接器自動發現賬戶訪問關鍵設置筆記本會話配置或全球Hadoop配置和轉發存儲帳戶訪問關鍵Azure突觸連接實例通過創建一個臨時Azure數據庫的作用域憑據

另外,如果你使用OAuth 2.0認證或ADLS Gen2 Azure突觸實例配置有管理服務(通常與身份VNet +服務端點設置),您必須設置useAzureMSI真正的。在這種情況下,連接器將指定身份=的管理服務身份的數據庫的作用域憑據,沒有秘密

流媒體支持

Azure突觸連接器提供高效和可擴展的結構化流寫支持Azure突觸與批處理寫提供一致的用戶體驗,並使用混合基或複製對於大型磚集群之間的數據傳輸和Azure突觸實例。類似於批寫道,流是ETL設計在很大程度上,從而提供更高的延遲,可能不適合實時數據處理在某些情況下。

容錯語義

默認情況下,Azure突觸流提供了端到端僅一次保證寫數據到Azure突觸表可靠地跟蹤進度查詢的使用檢查點位置DBFS、檢查點表在Azure突觸,和鎖定機製,以確保流可以處理任何類型的失敗,重試,和查詢將重新啟動。可選地,您可以選擇限製較少“至少一次”語義Azure突觸流設置spark.databricks.sqldw.streaming.exactlyOnce.enabled選項,在這種情況下,數據重複的事件可能發生間歇性連接失敗Azure突觸查詢或意外終止。

使用(批處理)

你可以使用這個連接器通過數據源API在Scala中,Python, SQL和R筆記本。

/ /否則,設置Blob存儲帳戶訪問關鍵會話配置在筆記本上。火花相依(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)/ /從Azure突觸表得到一些數據。瓦爾df:DataFrame=火花格式(“com.databricks.spark.sqldw”)選項(“url”," jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”)選項(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)選項(“forwardSparkAzureStorageCredentials”,“真正的”)選項(“數據表”,“< your-table-name >”)負載()/ /加載數據從Azure突觸查詢。瓦爾df:DataFrame=火花格式(“com.databricks.spark.sqldw”)選項(“url”," jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”)選項(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)選項(“forwardSparkAzureStorageCredentials”,“真正的”)選項(“查詢”,“選擇x, count(*)從表group by x”問)負載()/ /應用一些轉換數據,然後使用/ /數據源API來編寫數據返回到另一個表在Azure突觸。df格式(“com.databricks.spark.sqldw”)選項(“url”," jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”)選項(“forwardSparkAzureStorageCredentials”,“真正的”)選項(“數據表”,“< your-table-name >”)選項(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)保存()
#否則,設置Blob存儲帳戶訪問關鍵會話配置在筆記本上。火花相依(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)#從Azure突觸表得到一些數據。df=火花\格式(“com.databricks.spark.sqldw”)\選項(“url”," jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”)\選項(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)\選項(“forwardSparkAzureStorageCredentials”,“真正的”)\選項(“數據表”,“< your-table-name >”)\負載()#加載數據從Azure突觸查詢。df=火花\格式(“com.databricks.spark.sqldw”)\選項(“url”," jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”)\選項(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)\選項(“forwardSparkAzureStorageCredentials”,“真正的”)\選項(“查詢”,“選擇x, count(*)從表group by x”問)\負載()#應用一些轉換數據,然後使用#數據源API來編寫數據返回到另一個表在Azure突觸。df\格式(“com.databricks.spark.sqldw”)\選項(“url”," jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”)\選項(“forwardSparkAzureStorageCredentials”,“真正的”)\選項(“數據表”,“< your-table-name >”)\選項(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)\保存()
——否則,設置Blob存儲帳戶訪問關鍵會話配置在筆記本上。fsazure賬戶關鍵<你的- - - - - -存儲- - - - - -賬戶- - - - - -的名字>dfs核心窗戶= <你的- - - - - -存儲- - - - - -賬戶- - - - - -訪問- - - - - -關鍵>;——使用SQL讀取數據。創建example_table_in_spark_read使用com火花sqldw選項(url“jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”,forwardSparkAzureStorageCredentials“真正的”,數據表“< your-table-name >”,tempDir“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”);——寫入數據使用SQL。——創建一個新表,拋出錯誤如果具有相同名稱的表已經存在:創建example_table_in_spark_write使用com火花sqldw選項(url“jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”,forwardSparkAzureStorageCredentials“真正的”,數據表“< your-table-name >”,tempDir“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)作為選擇*table_to_save_in_spark;
#負載SparkR圖書館(SparkR)#否則,設置Blob存儲帳戶訪問關鍵會話配置在筆記本上。相依< -sparkR.callJMethod(sparkR.session(),“配置”)sparkR.callJMethod(相依,“設置”,“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)#從Azure突觸表得到一些數據。df< -read.df(=“com.databricks.spark.sqldw”,url=" jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”,forward_spark_azure_storage_credentials=“真正的”,數據表=“< your-table-name >”,tempDir=“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)#加載數據從Azure突觸查詢。df< -read.df(=“com.databricks.spark.sqldw”,url=" jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”,forward_spark_azure_storage_credentials=“真正的”,查詢=“選擇x, count(*)從表group by x”問,tempDir=“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)#應用一些轉換數據,然後使用#數據源API來編寫數據返回到另一個表在Azure突觸。write.df(df,=“com.databricks.spark.sqldw”,url=" jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”,forward_spark_azure_storage_credentials=“真正的”,數據表=“< your-table-name >”,tempDir=“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)

使用(流)

您可以使用Scala中的結構化流寫入數據和Python筆記本。

/ /設置Blob存儲帳戶訪問關鍵會話配置在筆記本上。火花相依(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)/ /準備流源;這可能是卡夫卡或一個簡單的流率。瓦爾df:DataFrame=火花readStream格式(“速度”)選項(“rowsPerSecond”,“100000”)選項(“numPartitions”,“16”)負載()/ /應用一些轉換到數據然後使用/ /結構化流API,不斷將數據寫入一個表在Azure突觸。dfwriteStream格式(“com.databricks.spark.sqldw”)選項(“url”," jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”)選項(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)選項(“forwardSparkAzureStorageCredentials”,“真正的”)選項(“數據表”,“< your-table-name >”)選項(“checkpointLocation”,“/ tmp_checkpoint_location”)開始()
#設置Blob存儲帳戶訪問關鍵會話配置在筆記本上。火花相依(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)#準備流源;這可能是卡夫卡或一個簡單的流率。df=火花readStream\格式(“速度”)\選項(“rowsPerSecond”,“100000”)\選項(“numPartitions”,“16”)\負載()然後使用#應用一些轉換數據#結構化流API,不斷用Azure突觸寫數據表。dfwriteStream\格式(“com.databricks.spark.sqldw”)\選項(“url”," jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”)\選項(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)\選項(“forwardSparkAzureStorageCredentials”,“真正的”)\選項(“數據表”,“< your-table-name >”)\選項(“checkpointLocation”,“/ tmp_checkpoint_location”)\開始()

配置

本節描述如何配置為連接器編寫語義,所需的權限,和各種各樣的配置參數。

支持保存模式批寫道

Azure突觸連接器支持ErrorIfExists,忽略,附加,覆蓋默認模式是保存模式ErrorIfExists。有關支持的更多信息模式保存在Apache火花,明白了火花SQL文檔保存模式

支持輸出模式為流寫道

Azure突觸連接器支持附加完整的輸出模式記錄附加和聚合。為更多的細節在輸出模式和兼容性矩陣,看到結構化流導

編寫語義

請注意

複製有磚運行時7.0及以上。

除了混合基,Azure突觸連接器支持複製聲明。的複製聲明提供了一個更加方便的方式加載數據到Azure的突觸,而不需要創建一個外部表,需要更少的權限加載數據,提高數據攝取到Azure突觸的性能。

默認情況下,連接器自動發現最好的寫語義(複製當針對一個Azure突觸Gen2實例,否則混合基)。您還可以指定編寫語義使用以下配置:

/ /配置為Azure突觸連接器在筆記本上寫語義會話相依。火花相依(“spark.databricks.sqldw.writeSemantics”,“< write-semantics >”)
#配置為Azure突觸連接器在筆記本上寫語義會話相依。火花相依(“spark.databricks.sqldw.writeSemantics”,“< write-semantics >”)
——配置寫語義Azure突觸連接器會話配置在筆記本上。火花sqldwwriteSemantics= <- - - - - -語義>;
#負載SparkR圖書館(SparkR)#配置為Azure突觸連接器在筆記本上寫語義會話相依。相依< -sparkR.callJMethod(sparkR.session(),“配置”)sparkR.callJMethod(相依,“設置”,“spark.databricks.sqldw.writeSemantics”,“< write-semantics >”)

在哪裏< write-semantics >要麼是混合基使用混合基,或複製使用複製聲明。

需要Azure突觸混合基的權限

當你使用混合基,Azure突觸連接器需要JDBC連接用戶有權限在Azure突觸連接實例中運行以下命令:

作為第一個命令的先決條件,連接器預計,數據庫已經存在主密鑰指定Azure突觸實例。如果沒有,您可以創建一個鍵使用創建主鍵命令。

此外,閱讀Azure突觸的餐桌上數據表中提到或表查詢JDBC用戶必須有權限訪問需要Azure突觸表。寫數據到一個Azure突觸的餐桌上數據表JDBC,用戶必須寫入該Azure突觸的權限表。

下表總結了與混合基所有操作所需要的權限:

操作

權限

當使用權限外部數據源

批處理寫

控製

看到批處理寫

流寫

控製

看到流寫

控製

看到

需要Azure突觸權限混合基與外部數據源的選擇

請注意

在磚運行時8.4及以上。

您可以使用預定義的外部數據源的混合基。看到externalDataSource參數參數為更多的信息。

使用混合基與預定義的外部數據源,Azure突觸連接器需要JDBC連接用戶有權限在Azure突觸連接實例中運行以下命令:

要創建一個外部數據源,您應該首先創建一個數據庫作用域憑據。下麵的鏈接描述如何創建一個作用域憑據為服務主體和外部數據源的沛富位置:

請注意

外部數據源的位置必須指向一個容器。連接器不工作如果是一個目錄的位置在一個容器中。

下表總結了混合基寫操作的權限與外部數據源選擇:

操作

權限(插入到現有表)

權限(插入一個新表)

批處理寫

管理數據庫批量操作

插入

創建表

改變任何模式

改變任何外部數據源

改變任何外部文件格式

管理數據庫批量操作

插入

創建表

改變任何模式

改變任何外部數據源

改變任何外部文件格式

流寫

管理數據庫批量操作

插入

創建表

改變任何模式

改變任何外部數據源

改變任何外部文件格式

管理數據庫批量操作

插入

創建表

改變任何模式

改變任何外部數據源

改變任何外部文件格式

下表總結了混合基與外部數據源讀取操作的權限選項:

操作

權限

創建表

改變任何模式

改變任何外部數據源

改變任何外部文件格式

你可以使用這個連接器讀通過數據源API在Scala中,Python, SQL和R筆記本。

/ /從Azure突觸表得到一些數據。瓦爾df:DataFrame=火花格式(“com.databricks.spark.sqldw”)選項(“url”," jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”)選項(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)選項(“externalDataSource”,“< your-pre-provisioned-data-source >”)選項(“數據表”,“< your-table-name >”)負載()
#從Azure突觸表得到一些數據。df=火花\格式(“com.databricks.spark.sqldw”)\選項(“url”," jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”)\選項(“tempDir”,“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”)\選項(“externalDataSource”,“< your-pre-provisioned-data-source >”)\選項(“數據表”,“< your-table-name >”)\負載()
——使用SQL讀取數據。創建example_table_in_spark_read使用com火花sqldw選項(url“jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”,forwardSparkAzureStorageCredentials“真正的”,數據表“< your-table-name >”,tempDir“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”,externalDataSource“< your-pre-provisioned-data-source >”);
#從Azure突觸表得到一些數據。df< -read.df(=“com.databricks.spark.sqldw”,url=" jdbc::狀態"置疑" / / < the-rest-of-the-connection-string >”,forward_spark_azure_storage_credentials=“真正的”,數據表=“< your-table-name >”,tempDir=“abfss: / / < your-container-name > @ < your-storage-account-name >.dfs.core.windows.net/ < your-directory-name >”externalDataSource=“< your-pre-provisioned-data-source >”)

Azure突觸的權限要求複製聲明

請注意

在磚運行時7.0及以上。

當你使用複製聲明,Azure突觸連接器需要JDBC連接用戶有權限在Azure突觸連接實例中運行以下命令:

如果目標表不存在在Azure突觸,許可需要運行以下命令除了上麵的命令:

下麵的表總結了批處理和流媒體寫的權限複製:

操作

權限(插入到現有表)

權限(插入一個新表)

批處理寫

管理數據庫批量操作

插入

管理數據庫批量操作

插入

創建表

改變模式::dbo

流寫

管理數據庫批量操作

插入

管理數據庫批量操作

插入

創建表

改變模式::dbo

參數

參數映射或選項提供火花SQL支持以下設置:

參數

要求

默認的

筆記

數據表

是的,除非查詢指定

沒有默認的

表創建或從Azure突觸。這個參數時需要保存數據回Azure突觸。

您還可以使用{模式名稱},{表名稱}訪問一個表在一個給定的模式。如果不提供模式名稱,默認模式與用戶使用JDBC。

以前的支持數據表變異是棄用,將在未來的版本中被忽略。使用“駝峰式大小寫”的名字。

查詢

是的,除非數據表指定

沒有默認的

查詢閱讀從Azure突觸。

表查詢中引用,您還可以使用{模式名稱},{表名稱}訪問一個表在一個給定的模式。如果不提供模式名稱,默認模式與用戶使用JDBC。

用戶

沒有

沒有默認的

Azure的突觸用戶名。必須配合使用密碼選擇。隻能使用,如果用戶名和密碼並不是通過在URL中。通過將導致一個錯誤。

密碼

沒有

沒有默認的

Azure突觸密碼。必須配合使用用戶選擇。隻能使用,如果用戶名和密碼並不是通過在URL中。通過將導致一個錯誤。

url

是的

沒有默認的

一個JDBC URLsqlserver設置為subprotocol。推薦使用Azure門戶提供的連接字符串。設置加密= true是強烈推薦的,因為它使SSL加密的JDBC連接。如果用戶密碼分別設置,您不需要包含URL。

jdbcDriver

沒有

由JDBC URL的subprotocol決定

要使用JDBC驅動程序的類名。這個類必須在類路徑中。在大多數情況下,它應該不需要指定這個選項,當適當的驅動程序類名應該自動由JDBC URL的subprotocol。

以前的支持jdbc_driver變異是棄用,將在未來的版本中被忽略。使用“駝峰式大小寫”的名字。

tempDir

是的

沒有默認的

一個abfssURI。我們建議你使用一個專用的Blob存儲Azure突觸的容器。

以前的支持tempdir變異是棄用,將在未來的版本中被忽略。使用“駝峰式大小寫”的名字。

tempFormat

沒有

拚花

保存臨時文件的格式寫作時blob存儲Azure突觸。默認為拚花;現在不允許其他值。

tempCompression

沒有

時髦的

要使用的壓縮算法編碼/解碼臨時火花和Azure突觸。目前支持的值是:未壓縮的,時髦的GZIP

forwardSparkAzureStorageCredentials

沒有

如果真正的,圖書館自動發現火花的憑證是用來連接到Blob存儲容器和將這些憑證轉發到Azure突觸在JDBC。這些憑據發送JDBC查詢的一部分。因此強烈建議您啟用SSL加密的JDBC連接時使用此選項。

當前版本的Azure突觸連接器需要(完全)之一forwardSparkAzureStorageCredentials,enableServicePrincipalAuth,或useAzureMSI要顯式地設置真正的

以前的支持forward_spark_azure_storage_credentials變異是棄用,將在未來的版本中被忽略。使用“駝峰式大小寫”的名字。

useAzureMSI

沒有

如果真正的,圖書館將指定身份=的管理服務身份的也沒有秘密它創建數據庫的作用域憑據。

當前版本的Azure突觸連接器需要(完全)之一forwardSparkAzureStorageCredentials,enableServicePrincipalAuth,或useAzureMSI要顯式地設置真正的

enableServicePrincipalAuth

沒有

如果真正的,圖書館將使用提供的服務主體的憑證連接到Azure存儲賬戶和Azure突觸分析/ JDBC。

當前版本的Azure突觸連接器需要(完全)之一forwardSparkAzureStorageCredentials,enableServicePrincipalAuth,或useAzureMSI要顯式地設置真正的

tableOptions

沒有

集群COLUMNSTORE指數,分布=ROUND_ROBIN

用於指定字符串表選項當創建Azure突觸的餐桌上數據表。這個字符串傳遞的條款的創建對Azure突觸發出的SQL語句。

以前的支持table_options變異是棄用,將在未來的版本中被忽略。使用“駝峰式大小寫”的名字。

預作用

沒有

沒有默認的(空字符串)

一個;分離的執行SQL命令列表Azure突觸前寫數據到Azure突觸實例。這些SQL命令必須是有效的命令接受Azure突觸。

如果這些命令失敗,它被視為一個錯誤和不執行寫操作。

postActions

沒有

沒有默認的(空字符串)

一個;分離的執行SQL命令列表Azure突觸後連接器成功寫數據到Azure突觸實例。這些SQL命令必須是有效的命令接受Azure突觸。

如果這些命令失敗,它被視為一個錯誤後,你會得到一個異常數據成功地寫入到Azure突觸實例。

maxStrLength

沒有

256年

StringType在火花是映射到NVARCHAR (maxStrLength)在Azure突觸類型。您可以使用maxStrLength設置字符串長度NVARCHAR (maxStrLength)類型列在表的名字數據表在Azure突觸。

以前的支持maxstrlength變異是棄用,將在未來的版本中被忽略。使用“駝峰式大小寫”的名字。

checkpointLocation

是的

沒有默認的

位置DBFS,將使用結構化流寫元數據和檢查點的信息。看到從故障中恢複檢查點在結構化流編程指南。

numStreamingTempDirsToKeep

沒有

0

表明有多少(最新)臨時目錄保持定期清理流微批次。當設置為0目錄刪除後立即觸發微批提交,另有規定的最新微批量保存和刪除目錄。使用1禁用定期清理。

applicationName

沒有

Databricks-User-Query

連接的標簽為每個查詢。如果未指定或值是空字符串,默認值的標簽添加JDBC URL。默認值可以防止Azure數據庫監控工具提高寄生對查詢的SQL注入警報。

maxbinlength

沒有

沒有默認的

控製列的長度BinaryType列。這個參數是翻譯成VARBINARY (maxbinlength)

identityInsert

沒有

設置為真正的使IDENTITY_INSERT模式,插入一個DataFrame提供價值的標識列Azure突觸表。

看到顯式值插入一個標識列

externalDataSource

沒有

沒有默認的

一個預定義的外部數據源讀取數據從Azure突觸。外部數據源隻能使用混合基和消除了控製許可要求因為連接器不需要創建一個作用域憑據和外部數據源加載數據。

例如使用和所需的權限列表使用外部數據源時,看到的需要Azure突觸權限混合基與外部數據源的選擇

maxErrors

沒有

0

的最大行數,可以拒絕在裝貨前的讀和寫操作(混合基或副本)取消了。拒絕行將被忽略。例如,如果兩個的記錄有錯誤,隻有8條記錄會被處理。

看到REJECT_VALUE文檔創建外部表MAXERRORS文檔中複製

請注意

  • tableOptions,預作用,postActions,maxStrLength隻有當寫作相關數據從磚在Azure突觸一個新表。

  • externalDataSource從Azure突觸相關隻有當讀取數據並從磚寫數據到一個新表在Azure突觸混合基語義。你不應該在使用指定其他存儲身份驗證類型externalDataSourceforwardSparkAzureStorageCredentialsuseAzureMSI

  • checkpointLocationnumStreamingTempDirsToKeep隻有相關的流媒體寫道磚在Azure突觸一個新表。

  • 即使所有數據源選擇名稱不區分大小寫的,我們建議您指定在“駝峰式大小寫”清晰。

查詢下推到Azure突觸

Azure突觸連接器實現了一組優化規則,推動以下運營商分成Azure突觸:

  • 過濾器

  • 項目

  • 限製

項目過濾器運營商支持以下表達式:

  • 大多數布爾邏輯運算符

  • 比較

  • 基本的算術運算

  • 數字和字符串類型轉換

限製支持運營商疊加隻有當沒有指定命令。例如:

選擇(10)*,但不選擇(10)*訂單通過上校

請注意

Azure突觸連接器不壓低表達式操作字符串,日期或時間戳。

查詢下推了Azure突觸連接器是默認啟用。你可以通過設置禁用它spark.databricks.sqldw.pushdown

臨時數據管理

Azure突觸連接器刪除臨時文件,它創造了Blob存儲容器。因此我們建議您定期刪除臨時文件根據用戶提供的tempDir的位置。

為了便於數據清理,Azure突觸連接器並不直接存儲數據文件tempDir,而是創建了一個目錄的形式:< tempDir > / < yyyy-MM-dd > / < HH-mm-ss-SSS > / < randomUUID > /。您可以設置(使用磚周期性工作工作特性或其他)遞歸刪除超過給定閾值的任何子目錄(例如,2天),假設不可能有火花工作運行超過這個門檻。

一個簡單的替代方法是定期刪除整個容器,並使用相同的名稱創建一個新的。這要求您使用專用容器Azure突觸連接器產生的臨時數據,你可以找到一個時間窗口,你可以保證沒有涉及連接器正在運行的查詢。

臨時對象管理

Azure突觸連接器自動化數據傳輸數據磚集群和Azure突觸之間的實例。從Azure突觸讀取數據表或查詢或寫數據到Azure突觸表,Azure突觸連接器創建臨時對象,包括數據庫作用域憑證,外部數據,外部文件格式,外部在幕後。這些對象隻在相應的火花的時間工作,應該自動被刪除。

當集群是運行一個查詢使用Azure突觸連接器,如果火花司機進程崩潰或強行重新啟動,或如果強行終止或重新啟動集群,臨時對象可能不會下降。為了便於識別和手動刪除這些對象,Azure突觸連接器前綴的名字中間Azure突觸實例中創建臨時對象的標記形式:tmp_databricks_ < yyyy_MM_dd_HH_mm_ss_SSS > _ < randomUUID > _ < internalObject >

我們建議您定期使用查詢尋找泄漏對象如以下:

  • 選擇*sys.database_scoped_credentials在哪裏的名字就像“tmp_databricks_ %”

  • 選擇*sys.external_data_sources在哪裏的名字就像“tmp_databricks_ %”

  • 選擇*sys.external_file_formats在哪裏的名字就像“tmp_databricks_ %”

  • 選擇*sys.external_tables在哪裏的名字就像“tmp_databricks_ %”

流檢查點表管理

Azure突觸連接器刪除流檢查點表時創建新的流媒體查詢開始。這種行為是一致的checkpointLocationDBFS。因此我們建議您定期刪除檢查點表在同一時間作為查詢刪除檢查點位置DBFS不會運行在未來或已經檢查點位置刪除。

默認情況下,所有檢查點表名稱<前綴> _ < query_id >,在那裏<前綴>是一個可配置的前綴與默認值databricks_streaming_checkpointquery_id是一個流媒體查詢ID_角色刪除。尋找過期或刪除所有檢查點表流查詢,運行查詢:

選擇*sys在哪裏的名字就像“databricks_streaming_checkpoint %”

您可以配置前綴與火花SQL配置選項spark.databricks.sqldw.streaming.exactlyOnce.checkpointTableNamePrefix

常見問題(FAQ)

我收到一個錯誤而使用Azure突觸連接器。我怎麼能知道這個錯誤從Azure突觸或磚嗎?

幫助你調試錯誤,通過特定的代碼拋出的任何異常Azure突觸連接器擴展包在一個異常SqlDWException特征。例外也使以下區別:

  • SqlDWConnectorException代表一個錯誤拋出的Azure突觸連接器

  • SqlDWSideException代表一個錯誤拋出的Azure突觸連接實例

我該怎麼辦如果我查詢失敗與錯誤“沒有訪問關鍵發現會話配置或全球Hadoop相依”?

這個錯誤意味著Azure突觸連接找不到存儲帳戶訪問鍵在筆記本上會話配置或全球Hadoop配置存儲中指定賬戶tempDir。看到使用(批處理)對於如何配置存儲帳戶訪問適當的例子。如果創建一個火花表使用Azure突觸連接器,您還必須提供存儲帳戶訪問憑據以讀或寫火花表。

我可以使用一個共享訪問簽名(SAS)訪問指定的Blob存儲容器tempDir嗎?

Azure突觸不支持使用情景應用程序訪問Blob存儲。因此,Azure突觸連接器不支持情景應用程序訪問指定的Blob存儲容器tempDir

我創建了一個火花表使用Azure突觸連接器數據表這個火花表選項,寫了一些數據,然後這個火花表下降。在Azure突觸端創建的表會下降嗎?

不。Azure突觸被認為是外部數據源。Azure突觸表的名字數據表火花表被刪除時不下降。

當寫DataFrame Azure突觸,為什麼我需要說.option(“數據表”,表).save ()而不是僅僅.saveAsTable(表)嗎?

這是因為我們想要明確以下區別:.option(“數據表”,表名)指的是數據庫(也就是說,Azure突觸)表,而.saveAsTable(表)指的是火花表。事實上,你甚至可以把這兩個:df.write。.option(“數據表”,tableNameDW) .saveAsTable (tableNameSpark)創建一個表在Azure突觸叫什麼tableNameDW和一個外部表的火花tableNameSpark這是由Azure突觸表。

警告

謹防以下區別.save ().saveAsTable ():

  • df.write。.option(“數據表”,tableNameDW) .mode(寫模式).save (),寫方式作用於Azure突觸表,如預期。

  • df.write。.option(“數據表”,tableNameDW) .mode(寫模式).saveAsTable (tableNameSpark),寫方式作用於火花表,而tableNameDW是靜靜地覆蓋如果它已經存在於Azure突觸。

這種行為沒有寫作不同於其他數據源。這隻是一個警告的火花DataFrameWriter API