在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 >”)\保存()
——設置存儲帳戶訪問關鍵會話配置在筆記本上。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)#設置存儲帳戶訪問關鍵會話配置在筆記本上。相依< -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存儲賬戶

  • Azure突觸Azure存儲賬戶

配置訪問Azure存儲

磚和突觸需要獲取一個Azure存儲的特權帳戶用於臨時數據存儲。

Azure突觸不支持使用SAS存儲帳戶訪問。您可以配置為服務的訪問通過下列之一:

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突觸。

您還可以使用{模式名稱},{表名稱}訪問一個表在一個給定的模式。如果不提供模式名稱,默認模式與用戶使用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變異是棄用,將在未來的版本中被忽略。使用“駝峰式大小寫”的名字。

tempCompression

沒有

時髦的

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

forwardSparkAzureStorageCredentials

沒有

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

配置存儲身份驗證時,您必須設置一個useAzureMSIforwardSparkAzureStorageCredentials真正的。此外,您可以設置enableServicePrincipalAuth真正的和使用JDBC和存儲身份驗證服務原則。

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

useAzureMSI

沒有

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

配置存儲身份驗證時,您必須設置一個useAzureMSIforwardSparkAzureStorageCredentials真正的。此外,您可以設置enableServicePrincipalAuth真正的和使用JDBC和存儲身份驗證服務原則。

enableServicePrincipalAuth

沒有

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

如果任何一forward_spark_azure_storage_credentialsuseAzureMSI被設置為真正的,選擇將優先於在存儲身份驗證服務原則。

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變異是棄用,將在未來的版本中被忽略。使用“駝峰式大小寫”的名字。

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文檔中複製

inferTimestampNTZType

沒有

如果真正的,值類型的Azure突觸時間戳被解讀為TimestampNTZType在讀取(時間戳沒有時區)。否則,所有的時間戳都解釋為TimestampType無論在底層Azure突觸類型表。

請注意

  • 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_ %”