使用 T-SQL 查询数据

适用于:✅Azure 数据资源管理器Azure MonitorMicrosoft Sentinel

除了主要查询语言 Kusto 查询语言 (KQL) 之外,查询编辑器还支持使用 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 代码并可能提高性能。 例如,如果你有下表中描述的存储函数,则可以按照代码示例所示执行它。

名称 parameters 正文 文件夹 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 标量 (scalar) ✔️ 要分配给请求属性的值。

注意

  • 两个语句必须用分号分隔,并且查询之前不应有空行。
  • 请求属性仅适用于紧随其后的表格表达式语句

示例

下表显示了如何使用 T-SQL 设置请求属性的示例。

请求属性 示例
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 语句

覆盖率

查询环境提供有限的 T-SQL 支持。 下表概述了不支持的或部分支持的 T-SQL 语句和功能。

T-SQL 语句或功能 说明
CREATEINSERTDROPALTER 不支持
架构或数据修改 不支持
ANYALLEXISTS 不支持
WITHIN GROUP 不支持
TOP PERCENT 不支持
TOP WITH TIES 求值为常规 TOP
TRUNCATE 返回最接近的值
SELECT * 列顺序可能与预期不同。 如果顺序很重要,请使用列名。
AT TIME ZONE 不支持
SQL 游标 不支持
相关子查询 不支持
递归 CTE 不支持
动态语句 不支持
流控制语句 仅支持对 THENELSE 来说具有相同架构的 IF THEN ELSE 语句。
复制列名 不支持。 原始名称保留为一列。
数据类型 返回的数据在类型上可能与 SQL Server 不同。 例如,TINYINTSMALLINT 在 Kusto 中没有等效项,并且可能会返回 INT32INT64,而不是 BYTEINT16

::: moniker range= "azure-data-explorer"