使用 T-SQL 查詢數據
除了主要查詢語言 Kusto 查詢語言 (KQL)之外,Azure 數據總管查詢編輯器還支援使用 T-SQL。 雖然 KQL 是建議的查詢語言,但 T-SQL 對於無法使用 KQL 的工具很有用。
注意
僅支援資料查詢語言 (DQL) 命令。 如需詳細資訊,請參閱 涵蓋範圍。
使用 T-SQL 進行查詢
若要執行 T-SQL 查詢,請使用空的 T-SQL 批注行開始查詢: --
。 語法 --
會指示查詢編輯器將下列查詢解譯為 T-SQL,而不是 KQL。
範例
--
SELECT * FROM StormEvents
T-SQL 至 Kusto 查詢語言
查詢編輯器支援將 T-SQL 查詢轉譯為 KQL 的能力。 這項翻譯功能對於熟悉 SQL 的使用者很有説明,而且想要深入瞭解 KQL。
若要取得 T-SQL SELECT
語句的對等 KQL,請在查詢之前新增 關鍵詞 explain
。 輸出將會是查詢的 KQL 版本,這對於了解對應的 KQL 語法和概念很有用。
請記得使用 T-SQL 批注行 --
在 T-SQL 查詢前面加上 ,告訴查詢編輯器將下列查詢解譯為 T-SQL,而不是 KQL。
範例
--
explain
SELECT top(10) *
FROM StormEvents
ORDER BY DamageProperty DESC
輸出
StormEvents
| project
StartTime,
EndTime,
EpisodeId,
EventId,
State,
EventType,
InjuriesDirect,
InjuriesIndirect,
DeathsDirect,
DeathsIndirect,
DamageProperty,
DamageCrops,
Source,
BeginLocation,
EndLocation,
BeginLat,
BeginLon,
EndLat,
EndLon,
EpisodeNarrative,
EventNarrative,
StormSummary
| sort by DamageProperty desc nulls first
| take int(10)
執行預存函式
使用 T-SQL 時,建議您建立優化的 KQL 查詢,並將其封裝在預存函式中,因為這樣做會將 T-SQL 程式代碼降到最低,而且可能會提高效能。 例如,如果您有如下表中所述的預存函式,您可以執行它,如程式代碼範例所示。
名稱 | 參數 | 本文 | 資料夾 | DocString |
---|---|---|---|---|
MyFunction | (myLimit: long) | {StormEvents | take myLimit} | MyFolder | 具有參數的示範函式 |
SELECT * FROM kusto.MyFunction(10)
注意
若要區分預存函式和仿真的 SQL 系統預存程式,請使用明確參考 kusto
架構來執行預存函式。 在此範例中,會使用 kusto.Myfunction
來執行預存函式。
設定要求屬性
要求屬性 會控制查詢的執行方式,並傳回結果。 若要使用 T-SQL 設定要求屬性,請使用下列語法在查詢前面加上一或多個語句:
語法
DECLARE
@__kql_set_
requestPropertyName 類型 =
值;
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
requestPropertyName | string |
✔️ | 要設定的要求屬性名稱。 |
type | string |
✔️ | 值的 T-SQL 資料類型 。 |
value | 純量 | ✔️ | 要指派給要求屬性的值。 |
注意
- 兩個語句必須以分號分隔,而且查詢之前不應該有空行。
- 要求屬性僅適用於緊接著的 表格式表達式語句 。
範例
下表顯示如何使用 T-SQL 設定要求屬性的範例。
Request 屬性 | 範例 |
---|---|
query_datetimescope_to |
DECLARE @__kql_set_query_datetimescope_to DATETIME = '2023-03-31 03:02:01'; |
request_app_name |
DECLARE @__kql_set_request_app_name NVARCHAR = 'kuku'; |
query_results_cache_max_age |
DECLARE @__kql_set_query_results_cache_max_age TIME = '00:05:00'; |
truncationmaxsize |
DECLARE @__kql_set_truncationmaxsize BIGINT = 4294967297; |
maxoutputcolumns |
DECLARE @__kql_set_maxoutputcolumns INT = 3001; |
notruncation |
DECLARE @__kql_set_notruncation BIT = 1; |
norequesttimeout |
DECLARE @__kql_set_norequesttimeout BIT = 0; |
若要使用 KQL 設定要求屬性,請參閱 set 語句。
涵蓋範圍
Azure 數據總管提供有限的 T-SQL 支援。 下表概述不支援或部分支援的 T-SQL 語句和功能。
T-SQL 語句或功能 | 描述 |
---|---|
CREATE 、INSERT 、DROP 和 ALTER |
不支援 |
架構或數據修改 | 不支援 |
ANY 、ALL 和 EXISTS |
不支援 |
WITHIN GROUP |
不支援 |
TOP PERCENT |
不支援 |
TOP WITH TIES |
評估為一般 TOP |
TRUNCATE |
傳回最接近的值 |
SELECT * |
數據行順序可能與預期不同。 如果順序很重要,請使用資料行名稱。 |
AT TIME ZONE |
不支援 |
SQL 數據指標 | 不支援 |
相互關聯的子查詢 | 不支援 |
遞迴 CTE | 不支援 |
動態語句 | 不支援 |
流程控制語句 | 只IF THEN ELSE 支援和具有相同架構THEN ELSE 的語句。 |
重複的數據行名稱 | 不支援。 原始名稱會保留一個數據行。 |
資料類型 | 傳回的數據可能與 SQL Server 不同。 例如, TINYINT 和 SMALLINT 在 Azure 資料總管中沒有任何對等專案,而且可能會傳回 或 INT32 INT64 ,而不是 BYTE 或 INT16 。 |