Azure Synapse SQL 是一項巨量資料分析服務,可讓您使用 T-SQL 語言來查詢和分析資料。 您可以使用 SQL Server 和 Azure SQL Database 中用於資料分析的、符合 ANSI 標準的 SQL 語言方言。
Transact-SQL 語言用於無伺服器 SQL 集區,且專用模型可以參考不同的物件,並在支援的功能集合上有一些差異。 在此頁面中,您可以找到 Synapse SQL 各種使用模式之間在 Transact-SQL 語言上的高階差異。
資料庫物件
Synapse SQL 中的使用模式可讓您使用不同的資料庫物件。 支援的物件類型比較如下表所示:
| Object | 專用 | 無伺服器 |
|---|---|---|
| 資料表 | 是 | 否,資料庫內的資料表不受支援。 無伺服器 SQL 集區只能查詢參考儲存在 Azure Data Lake Storage 或 Dataverse 中資料的外部資料表。 |
| 檢視 | 是。 檢視可以使用專用模型中可用的查詢語言元素。 | 是,您可以在外部資料表、使用 OPENROWSET 函式的查詢,以及其他檢視之上建立檢視。 檢視可以使用無伺服器模型中可用的查詢語言元素。 |
| 結構描述 | 是 | 是,支援結構描述。 使用結構描述來隔離不同的租用戶,並將其資料表放置在各自的結構描述中。 |
| 暫存資料表 | 是 | 暫存資料表可用來僅儲存來自系統檢視、常值或其他暫存資料表的一些資訊。 也支援對暫存資料表執行 UPDATE/DELETE。 您可以將暫存資料表與系統檢視聯結。 您無法從外部資料表選取資料並插入至暫存資料表,或將暫存資料表與外部資料表聯結,因為外部資料與暫存資料表無法在同一個查詢中混用,這些作業會失敗。 |
| 使用者定義程序 | 是 | 是,您可以將預存程序放置在任何使用者資料庫中 (不包含 master 資料庫)。 程序只能讀取外部資料,並使用無伺服器集區中可用的查詢語言元素。 |
| 使用者定義函式 | 是 | 是,僅支援內嵌資料表值函式。 不支援純量使用者定義函式。 |
| 觸發程序 | 否 | 否,無伺服器 SQL 集區不允許變更資料,因此觸發程序無法對資料變更做出回應。 |
| 外部資料表 | 是。 請參閱支援的資料格式。 | 是,提供外部資料表,且可用來讀取來自 Azure Data Lake Storage 或 Dataverse 的資料。 請參閱支援的資料格式。 |
| 快取查詢 | 是,提供多種形式 (以 SSD 為基礎的快取、記憶體內、結果集快取)。 此外,也支援具體化檢視。 | 否,僅會快取檔案統計資料。 |
| 結果集快取 | 是 | 否,不會快取查詢結果。 只會快取檔案統計資料。 |
| 具體化檢視 | 是 | 否,無伺服器 SQL 集區不支援具體化檢視。 |
| 資料表變數 | 否,請改用暫存資料表 | 否,不支援資料表變數。 |
| 資料表發佈項目 | 是 | 否,不支援資料表發佈項目。 |
| 資料表索引 | 是 | 否,不支援索引。 |
| 資料表分割 | 是。 | 外部資料表不支援分割。 您可以使用 Hive 分割資料夾結構來分割檔案,並在 Spark 中建立分割資料表。 Spark 分割會與無伺服器集區同步。 如果您未使用 Spark,您可以在資料夾結構中分割檔案,並在資料夾分割結構上建立分割檢視,但無法在分割資料夾上建立外部資料表。 |
| 統計資料 | 是 | 是,會在外部檔案上建立統計資料。 |
| 工作負載管理、資源類別與並行控制 | 是,請參閱工作負載管理、資源類別與並行控制。 | 否,您無法管理指派給查詢的資源。 無伺服器 SQL 集區會自動管理資源。 |
| 成本控制 | 是,使用相應放大與相應縮小動作。 | 是,您可以使用 Azure 入口網站或 T-SQL 程序來限制無伺服器集區的每日、每週或每月使用量。 |
查詢語言
Synapse SQL 中使用的查詢語言會依使用模式而在支援的功能上有所不同。 下表概述 Transact-SQL 方言中最重要的查詢語言差異:
| 陳述式 | 專用 | 無伺服器 |
|---|---|---|
| SELECT 陳述式 | 是。
SELECT 支援 SELECT 陳述式,但不支援某些 Transact-SQL 查詢子句,例如 FOR XML/FOR JSON、MATCH、OFFSET/FETCH。 |
是,SELECT 支援 SELECT 陳述式,但不支援某些 Transact-SQL 查詢子句,例如 FOR XML、MATCH、PREDICT、GROUPNG SETS,以及查詢提示。 |
| INSERT 陳述式 | 是 | 否。 使用 Spark 或其他工具將新資料上傳至 Data Lake。 針對高交易量工作負載,使用具有分析儲存體的 Azure Cosmos DB。 您可以使用 CETAS 來建立外部資料表並插入資料。 |
| UPDATE 陳述式 | 是 | 否,請使用 Spark 更新 Parquet/CSV 資料,變更會自動在無伺服器集區中可用。 針對高交易量工作負載,使用具有分析儲存體的 Azure Cosmos DB。 |
| DELETE 陳述式 | 是 | 否,請使用 Spark 刪除 Parquet/CSV 資料,變更會自動在無伺服器集區中可用。 針對高交易量工作負載,使用具有分析儲存體的 Azure Cosmos DB。 |
| MERGE 陳述式 | 是 (預覽版) | 否,請使用 Spark 合併 Parquet/CSV 資料,變更會自動在無伺服器集區中可用。 |
| CTAS 陳述式 | 是 | 否,無伺服器 SQL 集區不支援 CREATE TABLE AS SELECT 陳述式。 |
| CETAS 陳述式 | 是,您可以使用 CETAS 將資料初始載入至外部資料表。 | 是,您可以使用 CETAS 將資料初始載入至外部資料表。 CETAS 支援 Parquet 和 CSV 輸出格式。 |
| 交易 | 是 | 是,交易僅適用於中繼資料物件。 |
| 標籤 | 是 | 否,無伺服器 SQL 集區不支援標籤。 |
| 資料載入 | 是。 偏好的公用程式是 COPY 陳述式,但系統同時支援 BULK 載入 (BCP) 和 CETAS 來載入資料。 | 否,您無法將資料載入無伺服器 SQL 集區,因為資料儲存在外部儲存體上。 您可以使用 CETAS 陳述式將資料初始載入至外部資料表。 |
| 資料匯出 | 是。 使用 CETAS。 | 是。 您可以使用 CETAS 將外部儲存體 (Azure Data Lake、Dataverse、Azure Cosmos DB) 中的資料匯出到 Azure Data Lake。 |
| 類型 | 是,支援所有 Transact-SQL 類型,但不包含 cursor、hierarchyid、ntext、text 和 image、rowversion、空間類型、sql_variant 與 xml。 | 是,支援所有 Transact-SQL 類型,但不包含 cursor、hierarchyid、ntext、text 和 image、rowversion、空間類型、sql_variant、xml 與資料表類型。 請參閱如何將 Parquet 資料行類型對應到 SQL 類型。 |
| 跨資料庫查詢 | 否 | 是,支援跨資料庫查詢與三段式名稱參考,包括 USE 陳述式。 查詢可以參考同一個工作區中的無伺服器 SQL 資料庫或 Lake 資料庫。 不支援跨工作區查詢。 |
| 內建/系統函式 (分析) | 是,支援所有 Transact-SQL 分析、轉換、日期與時間、邏輯與數學函式,但不包含 CHOOSE 與 PARSE。 | 是,支援所有 Transact-SQL 分析、轉換、日期與時間、邏輯與數學函式。 |
| 內建/系統函式 (字串) | 是。 支援所有 Transact-SQL 字串、JSON 與定序函式,但不包含 STRING_ESCAPE 與 TRANSLATE。 | 是。 支援所有 Transact-SQL 字串、JSON 與定序函式。 |
| 內建/系統函式 (密碼編譯) | 部分 |
HASHBYTES 是無伺服器 SQL 集區唯一支援的密碼編譯函式。 |
| 內建/系統資料表值函式 | 是,支援 Transact-SQL 資料列集函式,但不包含 OPENXML、OPENDATASOURCE、OPENQUERY 與 OPENROWSET。 | 是,支援所有 Transact-SQL 資料列集函式,但不包含 OPENXML、OPENDATASOURCE 與 OPENQUERY。 |
| 內建/系統彙總 | 支援 Transact-SQL 內建彙總,但不包含 CHECKSUM_AGG 與 GROUPING_ID。 | 是,支援所有 Transact-SQL 內建彙總。 |
| 運算子 | 是,支援所有 Transact-SQL 運算子,但不包含 !> 與 !< | 是,支援所有 Transact-SQL 運算子。 |
| 控制流程 | 是。 支援所有 Transact-SQL 控制流程陳述式,但不包含 CONTINUE、GOTO、RETURN、USE 與 WAITFOR | 是。 支援所有 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 使用者名稱/密碼驗證 | 是 | 是,使用者可以使用其使用者名稱和密碼來存取無伺服器 SQL 集區。 |
| Microsoft Entra 驗證 | 是,Microsoft Entra 使用者 | 是,Microsoft Entra 登入與使用者可以使用其 Microsoft Entra 身分識別來存取無伺服器 SQL 集區。 |
| 儲存體 Microsoft Entra 直通驗證 | 是 | 是,Microsoft Entra 直通驗證適用於 Microsoft Entra 登入。 如果未指定認證,系統會將 Microsoft Entra 使用者的身分識別傳遞至儲存體。 SQL 使用者無法使用 Microsoft Entra 直通驗證。 |
| 儲存體共用存取簽章 (SAS) 權杖驗證 | 否 | 是,使用 EXTERNAL DATA SOURCE 中的 DATABASE SCOPED CREDENTIAL 搭配共用存取簽章權杖,或使用執行個體層級的 CREDENTIAL 搭配共用存取簽章。 |
| 儲存體存取金鑰驗證 | 是,在 EXTERNAL DATA SOURCE 中使用 DATABASE SCOPED CREDENTIAL。 | 否,請改用 SAS 權杖,而不要使用儲存體存取金鑰。 |
| 儲存體受控識別驗證 | 是,使用 受控服務識別認證 | 是,查詢可以使用工作區的受控識別認證來存取儲存體。 |
| 儲存體應用程式身分識別/服務主體 (SPN) 驗證 | 是 | 是,您可以使用服務主體應用程式 ID 建立認證,用來向儲存體進行驗證。 |
| 伺服器角色 | 否 | 是,支援 sysadmin、public 和其他伺服器角色。 |
| 伺服器層級認證 | 否 | 是,OPENROWSET 函式在未使用明確資料來源時會使用伺服器層級認證。 |
| 權限 - 伺服器層級 | 否 | 是,例如 CONNECT ANY DATABASE 和 SELECT ALL USER SECURABLES 可讓使用者讀取任何資料庫中的資料。 |
| 資料庫角色 | 是 | 是,您可以使用 db_owner、db_datareader 和 db_ddladmin 角色。 |
| 資料庫範圍認證 | 是,用於外部資料來源。 | 是,資料庫範圍認證可用於外部資料來源,以定義儲存體驗證方法。 |
| 權限 - 資料庫層級 | 是 | 是,您可以對資料庫物件授與、拒絕或撤銷權限。 |
| 權限 - 結構描述層級 | 是,包括可對結構描述的使用者/登入授與、拒絕與撤銷權限的能力。 | 是,您可以指定結構描述層級權限,包括可對結構描述的使用者/登入授與、拒絕與撤銷權限的能力。 |
| 權限 - 物件層級 | 是,包括可對使用者授與、拒絕與撤銷權限的能力。 | 是,您可以對受支援的系統物件之使用者/登入授與、拒絕與撤銷權限。 |
| 權限 - 資料行層級安全性 | 是 | 無伺服器 SQL 集區支援針對檢視的資料行層級安全性,但不支援外部資料表。 若是外部資料表,您可以在外部資料表之上建立邏輯檢視,然後套用資料行層級安全性。 |
| 資料列層級安全性 | 是 | 否,沒有內建的資料列層級安全性支援。 請使用自訂檢視作為替代方案。 |
| 資料遮罩 | 是 | 否,無伺服器 SQL 集區不支援內建資料遮罩。 請使用包裝 SQL 檢視來明確遮罩部分資料行作為替代方案。 |
| 內建/系統安全性與身分識別函式 | 部分 Transact-SQL 安全性函式與運算子:CURRENT_USER、HAS_DBACCESS、IS_MEMBER、IS_ROLEMEMBER、SESSION_USER、SUSER_NAME、SUSER_SNAME、SYSTEM_USER、USER、USER_NAME、EXECUTE AS、OPEN/CLOSE MASTER KEY |
支援部分 Transact-SQL 安全性函式與運算子:CURRENT_USER、HAS_DBACCESS、HAS_PERMS_BY_NAME、IS_MEMBER、IS_ROLEMEMBER、IS_SRVROLEMEMBER、SESSION_USER、SESSION_CONTEXT、SUSER_NAME、SUSER_SNAME、SYSTEM_USER、USER、USER_NAME、EXECUTE AS,以及 REVERT。 安全性函式無法用來查詢外部資料 (將結果儲存在變數中,再在查詢中使用)。 |
| 透明資料加密 (TDE) | 是 | 否,不支援透明資料加密。 |
| 資料探索與分類 | 是 | 否,不支援資料探索與分類。 |
| 弱點評量 | 是 | 否,弱點評量不可用。 |
| 進階威脅防護 | 是 | 否,不支援進階威脅防護。 |
| 稽核 | 是 | 是,無伺服器 SQL 集區支援稽核。 |
| 防火牆規則 | 是 | 是,可以在無伺服器 SQL 端點上設定防火牆規則。 |
| 私人端點 | 是 | 是,可以在無伺服器 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 工作室 | 是,SQL 指令碼 | 是,Synapse Studio 中可以使用 SQL 指令碼。 如果你回傳大量資料,建議使用 SSMS 或 Visual Studio Code 代替 Synapse Studio。 |
| Power BI | 是 | 是,您可以使用 Power BI 在無伺服器 SQL 集區上建立報表。 建議使用匯入模式進行報表製作。 |
| Azure Analysis Service | 是 | 是,您可以使用無伺服器 SQL 集區在 Azure Analysis Service 中載入資料。 |
| SQL Server Management Studio (SSMS) | 是 | 是的,你可以 使用 SQL Server Management Studio 查詢無伺服器的 SQL 池。 SSMS 只會顯示無伺服器 SQL 集區中可用的物件。 |
| 適用於 Visual Studio Code 的 msSQL 擴充功能 | 是 | 是的,你可以 用 Visual Studio Code 查詢無伺服器的 SQL 池。 支援 SQL 指令碼與 SQL 筆記本。 Visual Studio Code 僅顯示無伺服器 SQL 池中可用的物件。 |
附註
您可以使用 SSMS 連線到無伺服器 SQL 集區並查詢。 從版本 18.5 起提供部分支援,您只能用來連線與查詢。
大多數使用標準 Transact-SQL 語言的應用程式都可以查詢 Synapse SQL 的專用與無伺服器使用模式。
資料存取
分析的資料可儲存在各種儲存體類型上。 下表列出所有可用的儲存體選項:
| 儲存體類型 | 專用 | 無伺服器 |
|---|---|---|
| 內部儲存體 | 是 | 否,資料會放在 Azure Data Lake 或 Azure Cosmos DB 分析儲存體中。 |
| Azure Data Lake v2 | 是 | 是,您可以使用外部資料表和 OPENROWSET 函式從 ADLS 讀取資料。 在此了解如何設定存取控制。 |
| Azure Blob 儲存體 | 是 | 是,您可以使用外部資料表和 OPENROWSET 函式從 Azure Blob 儲存體讀取資料。 在此了解如何設定存取控制。 |
| Azure SQL/SQL Server (遠端) | 否 | 否,無伺服器 SQL 集區無法參考 Azure SQL Database。 您可以使用彈性查詢或連結的伺服器,從 Azure SQL 參考無伺服器 SQL 集區。 |
| Dataverse | 否,您可以在無伺服器 SQL 集區 (透過 ADLS) 使用 Azure Synapse Link 或 Spark,將 Azure Cosmos DB 資料載入專用集區。 | 是,您可以搭配 Azure Data Lake 使用 Azure Synapse Link for Dataverse 來讀取 Dataverse 資料表。 |
| Azure Cosmos DB 交易式儲存體 | 否 | 否,您無法存取 Azure Cosmos DB 容器來更新資料,或從 Azure Cosmos DB 交易式儲存體讀取資料。 使用 Spark 集區來更新 Azure Cosmos DB 交易式儲存體。 |
| Azure Cosmos DB 分析儲存體 | 否,您可以在無伺服器 SQL 集區 (透過 ADLS) 使用 Azure Synapse Link、ADF、Spark 或其他載入工具,將 Azure Cosmos DB 資料載入專用集區。 | 是,您可以使用 Azure Synapse Link 來查詢 Azure Cosmos DB 分析儲存體。 |
| Apache Spark 資料表 (工作區內) | 否 | 是,無伺服器集區可以使用中繼資料同步來讀取 PARQUET 和 CSV 資料表。 |
| Apache Spark 資料表 (遠端) | 否 | 否,無伺服器集區只能存取在同一個 Synapse 工作區中、於 Apache Spark 集區建立的 PARQUET 和 CSV 資料表。 不過,您可以手動建立外部資料表來參考外部 Spark 資料表的位置。 |
| Databricks 資料表 (遠端) | 否 | 否,無伺服器集區只能存取在同一個 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 | 是 | 是,您可以使用分隔文字格式和 T-SQL JSON 函式來查詢 JSON 檔案。 |
| Avro | 否 | 否,無伺服器 SQL 集區無法讀取 Avro 格式。 |
| 三角洲湖 | 否 | 是,您可以查詢 delta lake 檔案,包括具有巢狀類型的檔案。 |
| Common Data Model (CDM) | 否 | 否,無伺服器 SQL 集區無法讀取使用 Common Data Model 儲存的資料。 |
後續步驟
如需專用 SQL 集區與無伺服器 SQL 集區最佳做法的其他資訊,請參閱下列文章: