你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:了解常用运算符
适用于:✅Microsoft Fabric✅Azure 数据资源管理器Azure Monitor✅Microsoft✅ Sentinel
Kusto 查询语言 (KQL) 用于在 Azure 数据资源管理器、Azure Monitor Log Analytics、Azure Sentinel 等应用程序中编写查询。 本教程介绍用于访问和分析数据的基本 KQL 运算符。
有关如何在 Azure Monitor 中查询日志的更为具体的指导,请参阅日志查询入门。
本教程介绍以下操作:
本教程中的示例使用 StormEvents
表,该表已在帮助群集中公开提供。 若要使用自己的数据进行探索, 请创建自己的免费群集。
本教程中的示例使用StormEvents
在天气分析示例数据中公开提供的表。
先决条件
若要运行以下查询,需要一个有权访问示例数据的查询环境。 你可以使用以下项之一:
- 用于登录到帮助群集的 Microsoft 帐户或 Microsoft Entra 用户标识
- Microsoft帐户或Microsoft Entra 用户标识
- 启用了 Microsoft Fabric 容量的 Fabric 工作区
统计行数
首先使用 count 运算符查找 StormEvents
表中的风暴记录数。
StormEvents
| count
输出
计数 |
---|
59066 |
查看数据样本
若要大致了解数据,请使用 take 运算符查看记录样本。 此运算符返回表中指定数量的任意行,这些行可用于预览一般数据结构和内容。
StormEvents
| take 5
下表仅显示了 22 个返回列中的 5 个。 若要查看完整输出,请运行查询。
StartTime | EndTime | EpisodeId | EventId | 状态 | EventType | ... |
---|---|---|---|---|---|---|
2007-09-20T21:57:00Z | 2007-09-20T22:05:00Z | 11078 | 60913 | 佛罗里达州 | 龙卷风 | ... |
2007-12-20T07:50:00Z | 2007-12-20T07:53:00Z | 12554 | 68796 | 密西西比州 | 雷雨大风 | ... |
2007-12-30T16:00:00Z | 2007-12-30T16:05:00Z | 11749 | 64588 | 佐治亚州 | 雷雨大风 | ... |
2007-09-29T08:11:00Z | 2007-09-29T08:11:00Z | 11091 | 61032 | 大西洋南部 | Waterspout | ... |
2007-09-18T20:00:00Z | 2007-09-19T18:00:00Z | 11074 | 60904 | 佛罗里达州 | 暴雨 | ... |
选择列的子集
使用 project 运算符来简化视图并选择特定的列子集。 使用 project
通常比查看所有列更高效且更易于阅读。
StormEvents
| take 5
| project State, EventType, DamageProperty
输出
状态 | EventType | DamageProperty |
---|---|---|
大西洋南部 | Waterspout | 0 |
佛罗里达州 | 暴雨 | 0 |
佛罗里达州 | 龙卷风 | 6200000 |
佐治亚州 | 雷雨大风 | 2000 |
密西西比州 | 雷雨大风 | 20000 |
列出唯一值
根据以上查询的结果,似乎有多种类型的风暴。 使用 distinct 运算符列出所有唯一的风暴类型。
StormEvents
| distinct EventType
表中有 46 种类型的风暴。 下面是其中 10 种类型的示例。
EventType |
---|
雷雨大风 |
冰雹 |
山洪 |
Drought |
冬季天气 |
冬季风暴 |
大雪 |
疾风 |
霜冻/冰冻 |
洪水 |
... |
按条件筛选
where 运算符根据特定的条件筛选数据行。
以下查询在特定 EventType
的特定 State
中查找风暴事件。
StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| project StartTime, EndTime, State, EventType, DamageProperty
有 146 个事件与这些条件匹配。 下面是其中 5 个事件的示例。
StartTime | EndTime | 状态 | EventType | DamageProperty |
---|---|---|---|---|
2007-01-13T08:45:00Z | 2007-01-13T10:30:00Z | 德克萨斯 | 洪水 | 0 |
2007-01-13T09:30:00Z | 2007-01-13T21:00:00Z | 德克萨斯 | 洪水 | 0 |
2007-01-13T09:30:00Z | 2007-01-13T21:00:00Z | 德克萨斯 | 洪水 | 0 |
2007-01-15T22:00:00Z | 2007-01-16T22:00:00Z | 德克萨斯 | 洪水 | 20000 |
2007-03-12T02:30:00Z | 2007-03-12T06:45:00Z | 德克萨斯 | 洪水 | 0 |
... | ... | ... | ... | ... |
对结果进行排序
若要查看德克萨斯州造成最严重损害的严重洪灾,请使用 sort 运算符根据 DamageProperty
列按降序排列行。 默认的排序顺序为降序。 若要按升序排序,请指定 asc
。
StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| sort by DamageProperty
| project StartTime, EndTime, State, EventType, DamageProperty
输出
StartTime | EndTime | 状态 | EventType | DamageProperty |
---|---|---|---|---|
2007-08-18T21:30:00Z | 2007-08-19T23:00:00Z | 德克萨斯 | 洪水 | 5000000 |
2007-06-27T00:00:00Z | 2007-06-27T12:00:00Z | 德克萨斯 | 洪水 | 1200000 |
2007-06-28T18:00:00Z | 2007-06-28T23:00:00Z | 德克萨斯 | 洪水 | 1000000 |
2007-06-27T00:00:00Z | 2007-06-27T08:00:00Z | 德克萨斯 | 洪水 | 750000 |
2007-06-26T20:00:00Z | 2007-06-26T23:00:00Z | 德克萨斯 | 洪水 | 750000 |
... | ... | ... | ... | ... |
获取前 n 行
top 运算符返回按指定列排序的前 n 行。
以下查询返回在德克萨斯州造成最严重财产损失的五次洪灾。
StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty
| project StartTime, EndTime, State, EventType, DamageProperty
输出
StartTime | EndTime | 状态 | EventType | DamageProperty |
---|---|---|---|---|
2007-08-18T21:30:00Z | 2007-08-19T23:00:00Z | 德克萨斯 | 洪水 | 5000000 |
2007-06-27T00:00:00Z | 2007-06-27T12:00:00Z | 德克萨斯 | 洪水 | 1200000 |
2007-06-28T18:00:00Z | 2007-06-28T23:00:00Z | 德克萨斯 | 洪水 | 1000000 |
2007-06-27T00:00:00Z | 2007-06-27T08:00:00Z | 德克萨斯 | 洪水 | 750000 |
2007-06-26T20:00:00Z | 2007-06-26T23:00:00Z | 德克萨斯 | 洪水 | 750000 |
注意
运算符的顺序非常重要。 如果此处你将 top
放在 where
之前,则会得到不同的结果。 这是因为,数据将按顺序由每个运算符转换。 若要了解详细信息,请参阅表格表达式语句。
创建计算列
使用 project
可以仅指定要查看的列,而使用 extend
可将计算列追加到表的末尾。
以下查询创建 Duration
计算列,其中包含 StartTime
和 EndTime
之差。 由于我们只想查看少数几个选定列,因此在这种情况下最好使用 project
。
StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty desc
| project StartTime, EndTime, Duration = EndTime - StartTime, DamageProperty
输出
StartTime | EndTime | 持续时间 | DamageProperty |
---|---|---|---|
2007-08-18T21:30:00Z | 2007-08-19T23:00:00Z | 1.01:30:00 | 5000000 |
2007-06-27T00:00:00Z | 2007-06-27T12:00:00Z | 12:00:00 | 1200000 |
2007-06-28T18:00:00Z | 2007-06-28T23:00:00Z | 05:00:00 | 1000000 |
2007-06-27T00:00:00Z | 2007-06-27T08:00:00Z | 08:00:00 | 750000 |
2007-06-26T20:00:00Z | 2007-06-26T23:00:00Z | 03:00:00 | 750000 |
如果查看 Duration
计算列的话,你可能会注意到,造成最大损害的洪灾也是持续时间最长的洪灾。
使用 extend
查看 Duration
计算列以及所有其他列。 Duration
列添加为最后一列。
StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty desc
| extend Duration = EndTime - StartTime
输出
StartTime | EndTime | ... | 持续时间 |
---|---|---|---|
2007-08-18T21:30:00Z | 2007-08-19T23:00:00Z | ... | 1.01:30:00 |
2007-06-27T00:00:00Z | 2007-06-27T12:00:00Z | ... | 12:00:00 |
2007-06-28T18:00:00Z | 2007-06-28T23:00:00Z | ... | 05:00:00 |
2007-06-27T00:00:00Z | 2007-06-27T08:00:00Z | ... | 08:00:00 |
2007-06-26T20:00:00Z | 2007-06-26T23:00:00Z | ... | 03:00:00 |
将值从一个集映射到另一个集
静态映射是一种用于更改结果表示形式的有用方法。 在 KQL 中,执行静态映射的一种方法是使用动态字典和访问器将值从一个集映射到另一个集。
let sourceMapping = dynamic(
{
"Emergency Manager" : "Public",
"Utility Company" : "Private"
});
StormEvents
| where Source == "Emergency Manager" or Source == "Utility Company"
| project EventId, Source, FriendlyName = sourceMapping[Source]
输出
EventId | Source | FriendlyName |
---|---|---|
68796 | 灾害管理 | 公共 |
... | ... | ... |
72609 | 公用事业公司 | 私有 |
... | ... | ... |
下一步
熟悉有关编写 Kusto 查询的基本知识后,请继续学习下一篇教程,了解如何使用聚合函数来获取数据的更深入见解。