連接數據磚和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認證。OAuth 2.0和服務主體的更多信息,見訪問存儲Azure的Active Directory。
下麵的例子說明了這兩種方法使用存儲帳戶訪問鍵的方法。這同樣適用於OAuth 2.0配置。
筆記本會話配置(首選)
使用這種方法,該帳戶訪問密鑰在會話中設置配置的筆記本運行命令。這個配置不影響其他筆記本連接到相同的集群。火花
是SparkSession
對象提供的筆記本。
火花。相依。集(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)
全球Hadoop配置
這種方法更新全球Hadoop相關配置SparkContext
對象由所有筆記本共享。
sc。hadoopConfiguration。集(“fs.azure.account.key < your-storage-account-name > .dfs.core.windows.net”。,“< your-storage-account-access-key >”)
hadoopConfiguration
不暴露在所有版本的PySpark。雖然下麵的命令依靠一些火花內部,它應該與所有PySpark版本和在未來不太可能打破或改變:
sc。_jsc。hadoopConfiguration()。集(“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設計在很大程度上,從而提供更高的延遲,可能不適合實時數據處理在某些情況下。
使用(批處理)
你可以使用這個連接器通過數據源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存儲帳戶訪問關鍵會話配置在筆記本上。集fs。azure。賬戶。關鍵。<你的- - - - - -存儲- - - - - -賬戶- - - - - -的名字>。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突觸。df。writeStream。格式(“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突觸寫數據表。df。writeStream\。格式(“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突觸連接器會話配置在筆記本上。集火花。磚。sqldw。writeSemantics= <寫- - - - - -語義>;
#負載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突觸。 您還可以使用 以前的支持 |
|
是的,除非 |
沒有默認的 |
查詢閱讀從Azure突觸。 表查詢中引用,您還可以使用 |
|
沒有 |
沒有默認的 |
Azure的突觸用戶名。必須配合使用 |
|
沒有 |
沒有默認的 |
Azure突觸密碼。必須配合使用 |
|
是的 |
沒有默認的 |
一個JDBC URL |
|
沒有 |
由JDBC URL的subprotocol決定 |
要使用JDBC驅動程序的類名。這個類必須在類路徑中。在大多數情況下,它應該不需要指定這個選項,當適當的驅動程序類名應該自動由JDBC URL的subprotocol。 以前的支持 |
|
是的 |
沒有默認的 |
一個 以前的支持 |
|
沒有 |
|
保存臨時文件的格式寫作時blob存儲Azure突觸。默認為 |
|
沒有 |
|
要使用的壓縮算法編碼/解碼臨時火花和Azure突觸。目前支持的值是: |
|
沒有 |
假 |
如果 當前版本的Azure突觸連接器需要(完全)之一 以前的支持 |
|
沒有 |
假 |
如果 當前版本的Azure突觸連接器需要(完全)之一 |
|
沒有 |
假 |
如果 當前版本的Azure突觸連接器需要(完全)之一 |
|
沒有 |
|
用於指定字符串表選項當創建Azure突觸的餐桌上 以前的支持 |
|
沒有 |
沒有默認的(空字符串) |
一個 如果這些命令失敗,它被視為一個錯誤和不執行寫操作。 |
|
沒有 |
沒有默認的(空字符串) |
一個 如果這些命令失敗,它被視為一個錯誤後,你會得到一個異常數據成功地寫入到Azure突觸實例。 |
|
沒有 |
256年 |
以前的支持 |
|
是的 |
沒有默認的 |
位置DBFS,將使用結構化流寫元數據和檢查點的信息。看到從故障中恢複檢查點在結構化流編程指南。 |
|
沒有 |
0 |
表明有多少(最新)臨時目錄保持定期清理流微批次。當設置為 |
|
沒有 |
|
連接的標簽為每個查詢。如果未指定或值是空字符串,默認值的標簽添加JDBC URL。默認值可以防止Azure數據庫監控工具提高寄生對查詢的SQL注入警報。 |
|
沒有 |
沒有默認的 |
控製列的長度 |
|
沒有 |
假 |
設置為 看到顯式值插入一個標識列。 |
|
沒有 |
沒有默認的 |
一個預定義的外部數據源讀取數據從Azure突觸。外部數據源隻能使用混合基和消除了控製許可要求因為連接器不需要創建一個作用域憑據和外部數據源加載數據。 例如使用和所需的權限列表使用外部數據源時,看到的需要Azure突觸權限混合基與外部數據源的選擇。 |
|
沒有 |
0 |
的最大行數,可以拒絕在裝貨前的讀和寫操作(混合基或副本)取消了。拒絕行將被忽略。例如,如果兩個的記錄有錯誤,隻有8條記錄會被處理。 |
請注意
tableOptions
,預作用
,postActions
,maxStrLength
隻有當寫作相關數據從磚在Azure突觸一個新表。externalDataSource
從Azure突觸相關隻有當讀取數據並從磚寫數據到一個新表在Azure突觸混合基語義。你不應該在使用指定其他存儲身份驗證類型externalDataSource
如forwardSparkAzureStorageCredentials
或useAzureMSI
。checkpointLocation
和numStreamingTempDirsToKeep
隻有相關的流媒體寫道磚在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突觸連接器不刪除流檢查點表時創建新的流媒體查詢開始。這種行為是一致的checkpointLocation
DBFS。因此我們建議您定期刪除檢查點表在同一時間作為查詢刪除檢查點位置DBFS不會運行在未來或已經檢查點位置刪除。
默認情況下,所有檢查點表名稱<前綴> _ < query_id >
,在那裏<前綴>
是一個可配置的前綴與默認值databricks_streaming_checkpoint
和query_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。