使用 T-SQL 查詢數據

Azure Data Explorer 查詢編輯器除了支援 T-SQL 的主要查詢語言、Kusto 查詢語言 (KQL) 之外,也支援使用 T-SQL。 雖然 KQL 是建議的查詢語言,但 T-SQL 對於無法使用 KQL 的工具很有用。

注意

僅支援數據查詢語言 (DQL) 命令。 如需詳細資訊,請參閱 涵蓋範圍

使用 T-SQL 查詢

若要執行 T-SQL 查詢,請以空的 T-SQL 批注行開始查詢: --。 語法 -- 會指示查詢編輯器將下列查詢解譯為 T-SQL,而不是 KQL。

範例

--
SELECT * FROM StormEvents

要 Kusto 查詢語言 的 T-SQL

查詢編輯器支援將 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 設定要求屬性,請使用下列語法在查詢前面加上一或多個語句:

Syntax

DECLARE@__kql_set_requestPropertyName類型=;

參數

名稱 類型 必要 Description
requestPropertyName string ✔️ 要設定 的要求屬性 名稱。
type string ✔️ 值的 T-SQL 資料類型
value 純量 (scalar) ✔️ 要指派給要求屬性的值。

注意

  • 兩個語句必須以分號分隔,而且查詢之前應該沒有空行。
  • 要求屬性只適用於緊接著的 表格式表達式語句

範例

下表顯示如何使用 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 = 'k一';
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 Data Explorer 提供 T-SQL 的有限支援。 下表概述不支援或部分支援的 T-SQL 語句和功能。

T-SQL 語句或功能 Description
CREATEINSERTDROPALTER 不支援
架構或數據修改 不支援
ANYALLEXISTS 不支援
WITHIN GROUP 不支援
TOP PERCENT 不支援
TOP WITH TIES 評估為一般 TOP
TRUNCATE 傳回最接近的值
SELECT * 數據行順序可能與預期不同。 如果順序很重要,請使用資料行名稱。
AT TIME ZONE 不支援
SQL 數據指標 不支援
相互關聯的子查詢 不支援
遞迴 CTE 不支援
動態語句 不支援
流程控制語句 IFTHENELSE支援和 具有相同架構的THENELSE語句。
重複的資料行名稱 不支援。 原始名稱會保留一個數據行。
資料類型 傳回的數據可能與 SQL Server 不同。 例如,TINYINTSMALLINT 在 Azure Data Explorer 中沒有對等專案,而且可能會傳INT32回 或 INT64 ,而不是 BYTEINT16