在Azure突觸分析查詢數據
您可以訪問Azure從磚使用Azure突觸的突觸連接器,它使用複製
聲明在Azure突觸磚之間有效地傳輸大量數據集群和Azure突觸實例使用Azure數據存儲Gen2存儲湖占臨時登台。
請注意
你可能更喜歡Lakehouse聯合會管理查詢Azure突觸或Azure的數據倉庫數據。看到使用Lakehouse聯合運行查詢。
Azure突觸分析是一個基於雲計算的企業數據倉庫,利用大規模並行處理(MPP)快速運行複雜的查詢在pb的數據。
重要的
這個連接器使用突觸專用池實例,並與其他突觸不兼容組件。
請注意
複製
隻有在Azure湖代實例存儲的數據。如果你正在尋找細節處理混合基時,看到的連接數據磚和Azure突觸與混合基(遺留)。
例如語法突觸
您可以查詢突觸在Scala中,Python, SQL和r .下麵的代碼示例使用存儲賬戶鍵和轉發存儲憑證從磚到突觸。
請注意
使用Azure門戶提供的連接字符串,使安全套接字層(SSL)加密所有數據發送火花司機和Azure突觸之間通過JDBC連接實例。啟用了SSL加密驗證,你可以搜索加密= true
在連接字符串。
/ /設置存儲帳戶訪問關鍵會話配置在筆記本上。火花。相依。集(“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 >”)。保存()
#設置存儲帳戶訪問關鍵會話配置在筆記本上。火花。相依。集(“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 >”)\。保存()
——設置存儲帳戶訪問關鍵會話配置在筆記本上。集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)#設置存儲帳戶訪問關鍵會話配置在筆記本上。相依< -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 >”)
配置訪問Azure存儲
磚和突觸需要獲取一個Azure存儲的特權帳戶用於臨時數據存儲。
Azure突觸不支持使用SAS存儲帳戶訪問。您可以配置為服務的訪問通過下列之一:
使用帳戶存儲賬戶和設置的關鍵和秘密
forwardSparkAzureStorageCredentials
來真正的
。看到設置火花屬性配置訪問Azure存儲Azure憑證。使用Azure數據存儲Gen2湖OAuth 2.0認證。
配置您的Azure突觸實例托管服務身份。
Azure突觸需要權限
因為它使用複製
在後台,Azure突觸連接器需要JDBC連接用戶有權限在Azure突觸連接實例中運行以下命令:
如果目標表不存在在Azure突觸,許可需要運行以下命令除了上麵的命令:
下表總結了寫所需的權限複製
:
權限(插入到現有表) |
權限(插入一個新表) |
---|---|
管理數據庫批量操作 插入 |
管理數據庫批量操作 插入 創建表 改變模式::dbo |
網絡配置
如果您配置防火牆在Azure突觸,您必須配置網絡設置允許磚到Azure的突觸。首先,確保你的磚工作區部署在自己的虛擬網絡_。你可以上配置IP防火牆規則Azure Synpase允許從你的子網連接你的Synpase賬戶。看到Azure突觸分析IP防火牆規則。
配置連接從磚到突觸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突觸連接器支持ErrorIfExists
,忽略
,附加
,覆蓋
默認模式是保存模式ErrorIfExists
。有關支持的更多信息模式保存在Apache火花,明白了火花SQL文檔保存模式。
磚突觸連接器的選擇參考
的選項
提供火花SQL支持以下設置:
參數 |
要求 |
默認的 |
筆記 |
---|---|---|---|
|
是的,除非 |
沒有默認的 |
表創建或從Azure突觸。這個參數時需要保存數據回Azure突觸。 您還可以使用 以前的支持 |
|
是的,除非 |
沒有默認的 |
查詢閱讀從Azure突觸。 表查詢中引用,您還可以使用 |
|
沒有 |
沒有默認的 |
Azure的突觸用戶名。必須配合使用 |
|
沒有 |
沒有默認的 |
Azure突觸密碼。必須配合使用 |
|
是的 |
沒有默認的 |
一個JDBC URL |
|
沒有 |
由JDBC URL的subprotocol決定 |
要使用JDBC驅動程序的類名。這個類必須在類路徑中。在大多數情況下,它應該不需要指定這個選項,當適當的驅動程序類名應該自動由JDBC URL的subprotocol。 以前的支持 |
|
是的 |
沒有默認的 |
一個 以前的支持 |
|
沒有 |
|
要使用的壓縮算法編碼/解碼臨時火花和Azure突觸。目前支持的值是: |
|
沒有 |
假 |
如果 配置存儲身份驗證時,您必須設置一個 以前的支持 |
|
沒有 |
假 |
如果 配置存儲身份驗證時,您必須設置一個 |
|
沒有 |
假 |
如果 如果任何一 |
|
沒有 |
|
用於指定字符串表選項當創建Azure突觸的餐桌上 以前的支持 |
|
沒有 |
沒有默認的(空字符串) |
一個 如果這些命令失敗,它被視為一個錯誤和不執行寫操作。 |
|
沒有 |
沒有默認的(空字符串) |
一個 如果這些命令失敗,它被視為一個錯誤後,你會得到一個異常數據成功地寫入到Azure突觸實例。 |
|
沒有 |
256年 |
以前的支持 |
|
沒有 |
|
連接的標簽為每個查詢。如果未指定或值是空字符串,默認值的標簽添加JDBC URL。默認值可以防止Azure數據庫監控工具提高寄生對查詢的SQL注入警報。 |
|
沒有 |
沒有默認的 |
控製列的長度 |
|
沒有 |
假 |
設置為 看到顯式值插入一個標識列。 |
|
沒有 |
沒有默認的 |
一個預定義的外部數據源讀取數據從Azure突觸。外部數據源隻能使用混合基和消除了控製許可要求因為連接器不需要創建一個作用域憑據和外部數據源加載數據。 例如使用和所需的權限列表使用外部數據源時,看到的需要Azure突觸權限混合基與外部數據源的選擇。 |
|
沒有 |
0 |
的最大行數可以在裝運之前拒絕了在讀寫操作取消。拒絕行將被忽略。例如,如果兩個的記錄有錯誤,隻有8條記錄會被處理。 |
|
沒有 |
假 |
如果 |
請注意
tableOptions
,預作用
,postActions
,maxStrLength
隻有當寫作相關數據從磚在Azure突觸一個新表。即使所有數據源選擇名稱不區分大小寫的,我們建議您指定在“駝峰式大小寫”清晰。
查詢下推到Azure突觸
Azure突觸連接器實現了一組優化規則,推動以下運營商分成Azure突觸:
過濾器
項目
限製
的項目
和過濾器
運營商支持以下表達式:
大多數布爾邏輯運算符
比較
基本的算術運算
數字和字符串類型轉換
為限製
支持運營商疊加隻有當沒有指定命令。例如:
選擇(10)*從表
,但不選擇(10)*從表訂單通過上校
。
請注意
Azure突觸連接器不壓低表達式操作字符串,日期或時間戳。
查詢下推了Azure突觸連接器是默認啟用。你可以通過設置禁用它spark.databricks.sqldw.pushdown
來假
。
臨時數據管理
Azure突觸連接器不刪除臨時文件,它會創建在Azure存儲容器。磚建議您定期刪除臨時文件根據用戶提供的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_ %”