使用 T-SQL 查询数据
除了主要查询语言 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 语句或功能 | 说明 |
---|---|
CREATE 、INSERT 、DROP 和 ALTER |
不支持 |
架构或数据修改 | 不支持 |
ANY 、ALL 和 EXISTS |
不支持 |
WITHIN GROUP |
不支持 |
TOP PERCENT |
不支持 |
TOP WITH TIES |
求值为常规 TOP |
TRUNCATE |
返回最接近的值 |
SELECT * |
列顺序可能与预期不同。 如果顺序很重要,请使用列名。 |
AT TIME ZONE |
不支持 |
SQL 游标 | 不支持 |
相关子查询 | 不支持 |
递归 CTE | 不支持 |
动态语句 | 不支持 |
流控制语句 | 仅支持对 THEN 和 ELSE 来说具有相同架构的 IF THEN ELSE 语句。 |
复制列名 | 不支持。 原始名称保留为一列。 |
数据类型 | 返回的数据在类型上可能与 SQL Server 不同。 例如,TINYINT 和 SMALLINT 在 Kusto 中没有等效项,并且可能会返回 INT32 或 INT64 ,而不是 BYTE 或 INT16 。 |
相关内容
::: moniker range= "azure-data-explorer"
- 了解 Azure 数据资源管理器中的 SQL Server 仿真 ::: moniker-end
- 使用将 SQL 转换为 Kusto 查询语言的速查表