Azure Synapse SQL 中支援的 Transact-SQL 功能

Azure Synapse SQL 是一項巨量數據分析服務,可讓您使用 T-SQL 語言來查詢和分析數據。 您可以使用 SQL Server 和 Azure SQL 資料庫 上使用的標準 ANSI 相容 SQL 語言方言來進行數據分析。

Transact-SQL 語言用於無伺服器 SQL 集區,專用模型可以參考不同的物件,而且在支援的一組功能中有一些差異。 在此頁面中,您可以在 Synapse SQL 的取用模型之間找到高階 Transact-SQL 語言差異。

資料庫物件

Synapse SQL 中的取用模型可讓您使用不同的資料庫物件。 下表顯示所支援物件類型的比較:

Object 專用 無伺服器
表格 否,不支持資料庫內數據表。 無伺服器 SQL 集區只能查詢參考儲存在 Azure Data Lake 記憶體或 Dataverse 中的數據的外部資料表。
檢視 。 檢視可以使用 專用模型中提供的查詢語言專案 ,您可以透過 外部資料表、使用 OPENROWSET 函數的查詢,以及其他檢視來建立檢視。 檢視可以使用 無伺服器模型中提供的查詢語言專案
結構描述 ,支持架構。 使用架構來隔離不同的租使用者,併為每個架構放置其數據表。
暫存資料表 臨時表可能只是用來儲存系統檢視、常值或其他臨時表的一些資訊。 也支援暫存數據表上的UPDATE/DELETE。 您可以將臨時表與系統檢視聯結。 您無法從外部數據表選取數據,將它插入臨時表,或聯結具有外部數據表的臨時表-這些作業將會失敗,因為外部數據和臨時表不能在同一個查詢中混合。
使用者定義程式 是,預存程式可以放在任何用戶資料庫中(而非 master 資料庫)。 程式只能讀取外部數據,並使用 無伺服器集區中可用的查詢語言專案
用戶定義函式 是,僅支援內嵌數據表值函式。 不支援純量使用者定義函式。
觸發程序 No 否,無伺服器 SQL 集區不允許變更數據,因此觸發程式無法對數據變更做出反應。
外部資料表 。 請參閱支持 的數據格式 是, 外部數據表 可供使用,可用來從 Azure Data Lake 記憶體或 Dataverse 讀取數據。 請參閱支持 的數據格式
快取查詢 是,多個表單(SSD型快取、記憶體內部、 結果集快取)。 此外,也支持具體化檢視。 否,只會快取檔案統計數據。
結果集快取 否,不會快取查詢結果。 只會快取檔案統計數據。
具體化檢視 Yes 否,無伺服器 SQL 集區不支援具體化檢視。
數據表變數 ,使用臨時表 否,不支持數據表變數。
數據表散發 Yes 否,不支持數據表散發。
數據表索引 Yes 否,不支持索引。
數據表數據分割 外部數據表不支持數據分割。 您可以使用Hive-partition 資料夾結構分割檔案,並在Spark中建立資料分割數據表。 Spark 資料分割將會 與無伺服器集區同步處理。 如果您不是使用 Spark,您可以在資料夾結構中分割檔案,而且可以在資料夾分割結構上建立 資料分割檢視 ,但無法在分割的資料夾上建立外部資料表。
統計資料 Yes 是,會在外部檔案上建立統計數據
工作負載管理、資源類別和並行控制 是,請參閱 工作負載管理、資源類別和並行控制 否,您無法管理指派給查詢的資源。 無伺服器 SQL 集區會自動管理資源。
成本控制 是,使用相應增加和相應減少動作。 是,您可以使用 Azure 入口網站 或 T-SQL 程式限制無伺服器集區的每日、每周或每月使用量。

查詢語言

Synapse SQL 中使用的查詢語言可以根據取用模型,有不同的支援功能。 下表概述 Transact-SQL 方言中最重要的查詢語言差異:

陳述式 專用 無伺服器
SELECT 語句 是。 SELECT 支援 語句,但不支援某些 Transact-SQL 查詢子句,例如 FOR XML/FOR JSONMATCH、OFFSET/FETCH。 是, SELECT 支援語句,但不支援某些 Transact-SQL 查詢子句,例如 FOR XMLMATCHPREDICT、GROUPNG SETS 和查詢提示。
INSERT 語句 Yes 否。 使用 Spark 或其他工具將新數據上傳至 Data Lake。 使用 Azure Cosmos DB 搭配高度交易式工作負載的分析記憶體。 您可以使用 CETAS 來建立外部資料表並插入資料。
UPDATE 語句 Yes 否,使用Spark更新 Parquet/CSV 數據,且變更將會自動在無伺服器集區中使用。 使用 Azure Cosmos DB 搭配高度交易式工作負載的分析記憶體。
DELETE 語句 Yes 否,使用Spark刪除 Parquet/CSV 數據,且變更將會自動在無伺服器集區中使用。 使用 Azure Cosmos DB 搭配高度交易式工作負載的分析記憶體。
MERGE 語句 是 (預覽 否,使用Spark合併 Parquet/CSV 數據,且變更將會自動在無伺服器集區中使用。
CTAS 語句 Yes 否, 無伺服器 SQL 集區不支援 CREATE TABLE AS SELECT 語句。
CETAS 語句 是,您可以使用 CETAS 執行初始載入外部資料表 是,您可以使用 CETAS 執行初始載入外部資料表。 CETAS 支援 Parquet 和 CSV 輸出格式。
交易 Yes 是,交易僅適用於元數據物件。
標籤 Yes 否,無伺服器 SQL 集區不支持標籤。
數據載入 是。 慣用公用程式是 COPY 語句,但系統同時支援 BULK 載入 (BCP) 和 CETAS 來進行數據載入。 否,您無法將資料載入無伺服器 SQL 集區,因為資料會儲存在外部記憶體上。 您一開始可以使用 CETAS 語句將資料載入外部資料表。
資料匯出 是。 使用 CETAS 是。 您可以使用 CETAS,將數據從外部記憶體(Azure Data Lake、Dataverse、Azure Cosmos DB)導出至 Azure Data Lake
類型 是,除了 cursor、hierarchyidntext、text 和 image、rowversion、Spatial Types、sql_variantxml 以外的所有 Transact-SQL 類型 是,除了 cursor、hierarchyidntext、text 和 imagerowversionSpatial Typessql_variantxml 和 Table 類型之外,支援所有 Transact-SQL 類型。 請參閱如何在這裡Parquet 數據行類型對應至 SQL 類型。
跨資料庫查詢 No 是,支援跨資料庫查詢和 3 部分名稱參考,包括 USE 語句。 查詢可以參考相同工作區中的無伺服器 SQL 資料庫或 Lake 資料庫。 不支援跨工作區查詢。
內建/系統函式 (分析) 是,除了 CHOOSE 和 PARSE 以外,所有 Transact-SQL 分析、轉換、日期和時間、邏輯、數學函式 是,支援所有 Transact-SQL 分析、轉換、 日期和時間、邏輯和 數學 函式。
內建/系統函式 (字串 是。 除了 STRING_ESCAPE 和 TRANSLATE 以外,所有 Transact-SQL 字串JSON 和定序函式 是。 支援所有 Transact-SQL 字串JSON 和定序函式。
內建/系統函式 (密碼編譯 部分 HASHBYTES 是無伺服器 SQL 集區中唯一支援的密碼編譯函式。
內建/系統數據表值函式 是,除了 OPENXML、OPENDATASOURCEOPENQUERYOPENROWSET 以外,Transact-SQL 數據列集函式除外 是,除了 OPENXMLOPENDATASOURCEOPENQUERY 之外,支援所有 Transact-SQL 數據列集函式。
內建/系統匯總 Transact-SQL 內建匯總,除了 CHECKSUM_AGGGROUPING_ID 是,支援所有 Transact-SQL 內 建匯總
運算子 是,除了 ! 和 之外的所有 Transact-SQL 運算子!>< 是,支援所有 Transact-SQL 運算符
控制流程 是。 所有 Transact-SQL 控制流程語句,但 CONTINUEGOTORETURNUSEWAITFOR 除外 是。 支援所有 Transact-SQL 流程控制語句 。 不支援條件中的 WHILE (...) SELECT 查詢。
DDL 語句 (CREATE、 ALTER、 DROP) 是。 所有適用於支持物件類型的 Transact-SQL DDL 語句 是,支援所有適用於支持物件類型的 Transact-SQL DDL 語句。

安全性

Synapse SQL 集區可讓您使用內建安全性功能來保護您的數據和控制存取。 下表比較 Synapse SQL 耗用量模型之間的高階差異。

功能 專用 無伺服器
登入 N/A(資料庫僅支援自主使用者) 是,支援伺服器層級的 Microsoft Entra ID 和 SQL 登入。
使用者 N/A(資料庫僅支援自主使用者) 是,支援資料庫使用者。
自主使用者 是。 注意: 只有一個 Microsoft Entra 使用者可以不受限制的系統管理員 否,不支援自主使用者。
SQL 使用者名稱/密碼驗證 Yes 是,使用者可以使用其使用者名稱和密碼來存取無伺服器 SQL 集區。
Microsoft Entra 驗證 是,Microsoft Entra 使用者 是,Microsoft Entra 登入和使用者可以使用其 Microsoft Entra 身分識別來存取無伺服器 SQL 集區。
儲存體 Microsoft Entra 傳遞驗證 Yes 是, Microsoft Entra 傳遞驗證 適用於 Microsoft Entra 登入。 如果未指定認證,Microsoft Entra 使用者的身分識別就會傳遞至記憶體。 SQL 使用者無法使用 Microsoft Entra 傳遞驗證。
儲存體 共用存取簽章 (SAS) 令牌驗證 No 是,在 EXTERNAL DATA SOURCE 中使用 DATABASE SCOPED CREDENTIAL 搭配共用存取簽章令牌,或搭配共用存取簽章實例層級 CREDENTIAL
儲存體 存取金鑰驗證 是,在 EXTERNAL DATA SOURCE 中使用 DATABASE SCOPED CREDENTIAL 否, 請使用 SAS 令牌 ,而不是記憶體存取金鑰。
儲存體 受控識別驗證 是,使用 受控服務識別認證 是,查詢可以使用工作區 受控識別認證 來存取記憶體。
儲存體 應用程式身分識別/服務主體 (SPN) 驗證 是,您可以使用服務主體應用程式標識碼來建立認證,以在記憶體上進行驗證。
伺服器角色 No 支援系統管理員、公用和其他伺服器角色。
伺服器層級認證 No 是,不會使用明確數據源的OPENROWSET函式會使用伺服器層級認證。
許可權 - 伺服器層級 No 是,例如, CONNECT ANY DATABASE 讓用戶 SELECT ALL USER SECURABLES 能夠從任何資料庫讀取數據。
資料庫角色 Yes 是,您可以使用 db_ownerdb_datareaderdb_ddladmin 角色。
資料庫範圍認證 是,用於外部數據源。 是,資料庫範圍認證可用於外部數據源,以 定義記憶體驗證方法
許可權 - 資料庫層級 Yes 是,您可以授與、拒絕或撤銷資料庫對象的許可權。
許可權 - 架構層級 是,包括對架構上的使用者/登入授與、拒絕和 REVOKE 許可權的能力 是,您可以指定架構層級許可權,包括授與、DENY 和 REVOKE 許可權給架構上的使用者/登入。
許可權 - 物件層級 是,包括對使用者授與、拒絕和 REVOKE 許可權的能力 是,您可以授與、DENY 和 REVOKE 許可權給支援之系統物件上的使用者/登入。
許可權 - 資料行層級安全性 Yes 檢視的無伺服器 SQL 集區支援資料行層級安全性,而不是外部資料表。 如果是外部數據表,您可以在外部數據表上方建立邏輯檢視,而不是套用數據行層級安全性。
資料列層級安全性 否,數據列層級安全性沒有內建支援。 使用自定義檢視作為 因應措施
數據遮罩 否,無伺服器 SQL 集區不支援內建數據遮罩。 使用明確遮罩某些數據行的包裝函式 SQL 檢視作為因應措施。
內建/系統安全性與身分識別函式 某些 Transact-SQL 安全性函式和運算子:、、、 SESSION_USERSUSER_SNAMEUSER_NAMEEXECUTE ASSUSER_NAMEUSERIS_ROLEMEMBERSYSTEM_USERIS_MEMBERHAS_DBACCESSCURRENT_USEROPEN/CLOSE MASTER KEY 支援某些 Transact-SQL 安全性函式和運算符:CURRENT_USER、、IS_ROLEMEMBERSUSER_NAMESESSION_USERHAS_PERMS_BY_NAMESESSION_CONTEXTIS_MEMBERIS_SRVROLEMEMBERHAS_DBACCESSSUSER_SNAMEUSER_NAMESYSTEM_USERUSEREXECUTE AS和 。REVERT 安全性函式無法用來查詢外部數據(將結果儲存在可用於查詢中的變數)。
透明資料加密 (TDE) 否,不支援 透明資料加密。
數據探索與分類 否,不支持數據探索和分類。
弱點評定 否,無法使用弱點評量。
進階威脅防護 否,不支援進階威脅防護。
稽核 是, 無伺服器 SQL 集區支援 稽核。
防火牆規則 Yes 是,可以在無伺服器 SQL 端點上設定防火牆規則。
私人端點 Yes 是,私人端點可以在無伺服器 SQL 集區上設定。

專用 SQL 集區和無伺服器 SQL 集區會使用標準 Transact-SQL 語言來查詢數據。 如需詳細差異,請參閱 Transact-SQL 語言參考

平台功能

功能 專用 無伺服器
調整大小 無伺服器 SQL 集區會根據工作負載自動調整。
暫停/繼續 無伺服器 SQL 集區會在未使用且在需要時啟用時自動停用。 不需要用戶動作。
資料庫備份 否。 數據會儲存在外部系統中(ADLS、Cosmos DB),因此請確定您正在源端備份數據。 請確定您在原始檔控制中使用儲存 SQL 元資料(資料表、檢視、程式定義和使用者許可權)。 Lake 資料庫中的數據表定義會儲存在 Spark 元數據中,因此請確定您也在原始檔控制中保留 Spark 資料表定義。
資料庫還原 否。 數據會儲存在外部系統中(ADLS、Cosmos DB),因此您需要復原來源系統以攜帶您的數據。 請確定您的 SQL 元資料(資料表、檢視、程式定義和使用者許可權)位於原始檔控制中,以便重新建立 SQL 物件。 Lake 資料庫中的數據表定義會儲存在 Spark 元數據中,因此請確定您也在原始檔控制中保留 Spark 資料表定義。

工具

您可以使用各種工具來連線到 Synapse SQL 來查詢資料。

工具 專用 無伺服器
Synapse Studio 是,SQL 腳本 是,SQL 腳本可用於 Synapse Studio。 如果您要傳回大量數據,請使用 SSMS 或 ADS,而不是 Synapse Studio。
Power BI Yes 是,您可以使用 Power BI 在無伺服器 SQL 集區上建立報表。 建議使用匯入模式進行報告。
Azure Analysis Service Yes 是,您可以使用無伺服器 SQL 集區在 Azure Analysis Service 中載入數據。
Azure Data Studio (ADS) Yes 是,您可以使用 Azure Data Studio (1.18.0 版或更新版本)來查詢無伺服器 SQL 集區。 支援 SQL 腳本和 SQL 筆記本。
SQL Server Management Studio (SSMS) Yes 是,您可以使用 SQL Server Management Studio (18.5 版或更新版本)來查詢無伺服器 SQL 集區。 SSMS 只會顯示無伺服器 SQL 集區中可用的物件。

注意

您可以使用 SSMS 連線到無伺服器 SQL 集區和查詢。 從 18.5 版開始,部分支援它,您可以使用它來連線和查詢。

大部分的應用程式都使用標準 Transact-SQL 語言可以查詢 Synapse SQL 的專用和無伺服器耗用量模型。

資料存取

分析的數據可以儲存在各種記憶體類型上。 下表列出所有可用的記憶體選項:

儲存體類型 專用 無伺服器
內部記憶體 Yes 否,數據會放在 Azure Data Lake 或 Azure Cosmos DB 分析記憶體中。
Azure Data Lake v2 Yes 是,您可以使用外部數據表和 函 OPENROWSET 式從 ADLS 讀取數據。 在這裡瞭解如何 設定訪問控制
Azure Blob 儲存體 Yes 是,您可以使用外部數據表和 函OPENROWSET式從 Azure Blob 儲存體 讀取數據。 在這裡瞭解如何 設定訪問控制
Azure SQL/SQL Server (遠端) No 否,無伺服器 SQL 集區無法參考 Azure SQL 資料庫。 您可以使用彈性查詢或鏈接的伺服器,從 Azure SQL 參考無伺服器 SQL 集區
Dataverse 否,您可以使用 無伺服器 SQL 集區中的 Azure Synapse Link(透過 ADLS) 或 Spark,將 Azure Cosmos DB 數據載入專用集區。 是,您可以使用適用於 Dataverse 與 Azure Data Lake 的 Azure Synapse 連結來讀取 Dataverse 數據表。
Azure Cosmos DB 交易式記憶體 No 否,您無法存取 Azure Cosmos DB 容器來更新數據,或從 Azure Cosmos DB 交易式記憶體讀取數據。 使用 Spark 集區來更新 Azure Cosmos DB 交易式記憶體。
Azure Cosmos DB 分析記憶體 否,您可以使用 無伺服器 SQL 集區中的 Azure Synapse Link,將 Azure Cosmos DB 數據載入專用集區(透過 ADLS)、ADF、Spark 或其他一些載入工具。 是,您可以使用 Azure Synapse Link 查詢 Azure Cosmos DB 分析記憶體
Apache Spark 數據表 (在工作區中) No 是,無伺服器集區可以使用元數據同步處理來讀取 PARQUET 和 CSV 數據表
Apache Spark 資料表 (遠端) No 否,無伺服器集區只能存取在相同 Synapse 工作區的 Apache Spark 集區中建立的 PARQUET 和 CSV 數據表。 不過,您可以手動建立參考外部 Spark 資料表位置的外部數據表。
Databricks 資料表 (遠端) No 否,無伺服器集區只能存取在相同 Synapse 工作區的 Apache Spark 集區中建立的 PARQUET 和 CSV 數據表。 不過,您可以手動建立參考 Databricks 數據表位置的外部數據表。

資料格式

分析的數據可以儲存在各種記憶體格式。 下表列出可分析的所有可用資料格式:

資料格式 專用 無伺服器
分隔 是,您可以 查詢分隔的檔案
CSV 是 (不支援多字元分隔符) 是,您可以 查詢 CSV 檔案。 為了提升效能,請使用 PARSER_VERSION 2.0,以提供 更快的剖析速度。 如果您要將數據列附加至 CSV 檔案,請確定您將 檔案查詢為可附加的。
Parquet 是,您可以 查詢 Parquet 檔案,包括具有 巢狀類型的檔案。
Hive ORC 否,無伺服器 SQL 集區無法讀取 Hive ORC 格式。
Hive RC 否,無伺服器 SQL 集區無法讀取 Hive RC 格式。
JSON Yes 是,您可以使用分隔文字格式和 T-SQL JSON 函式來查詢 JSON 檔案。
Avro No 否,無伺服器 SQL 集區無法讀取 Avro 格式。
Delta Lake No 是,您可以 查詢 Delta Lake 檔案,包括巢 狀類型的檔案。
通用資料模型 (CDM) No 否,無伺服器 SQL 集區無法讀取使用 Common Data Model 儲存的數據。

下一步

如需專用 SQL 集區和無伺服器 SQL 集區最佳做法的其他資訊,請參閱下列文章: