使用 KQL 编写查询
要从 KQL 数据库中的表查询数据,可使用 Kusto 查询语言 (KQL),它用于在 Azure 数据资源管理器、Azure Monitor Log Analytics、Azure Sentinel 和 Microsoft Fabric 中编写查询。 KQL 是处理数据并返回结果的只读请求。 KQL 查询由一个或多个查询语句组成。
查询语句包含一个表名称,后跟一个或多个运算符,这些运算符对数据执行 take
、filter
、transform
aggregate
、 或 join
操作。 例如:
sales
| take 10
KQL 查询使用关系运算符创建,便于通过类似于 SQL 的语法筛选和转换数据。 但是,KQL 语法包含支持高级文本和模式匹配、统计分析、时序投影、地理空间和机器学习算法的扩展。
在 KQL 中创建和加载表
在大多数情况下,使用 Microsoft Fabric 中的图形工具创建表并定义其源。 不过,可使用 KQL 语句来创建和加载表。
若要创建表并将数据引入其中,可以使用 .create table
命令创建具有指定架构的新空表。 需要提供表名称、列名称及其数据类型,还需根据情况提供一些属性,例如文档字符串或文件夹。 例如:
.create table sales (
SalesOrderNumber: string,
SalesOrderLineItem: int,
OrderDate: datetime,
CustomerName: string,
EmailAddress: string,
Item: string,
Quantity: int,
UnitPrice: real,
TaxAmount: real)
此命令会创建一个名为 sales 的表,其中包含 9 个不同数据类型的列。
可以通过多种方式将数据引入表中,包括 ingest into
命令,如下示例所示:
.ingest into table sales 'https://<StorageAccountName>.blob.core.windows.net/container/<TableName>.csv'
with (ignoreFirstRecord = true)
检索表中的数据
基本 KQL 查询涉及到从表中选择数据,以及对数据应用筛选器和转换。 在以下示例中,我们将只查询 sales
表中的所有数据。
sales
此查询的输出应如以下示例所示:
SalesOrderNumber | SalesOrderLineItem | OrderDate | CustomerName | EmailAddress | 项 | 数量 | 单价 | TaxAmount |
---|---|---|---|---|---|---|---|---|
SO43701 | 1 | 2019-07-01T00:00:00Z | Christy Zhu | christy12@adventure-works.com | Mountain-100 Silver 44 | 1 | 3399.99 | 271.9992 |
SO43704 | 1 | 2019-07-01T00:00:00Z | Julio Ruiz | julio1@adventure-works.com | Mountain-100 Black 48 | 1 | 3374.99 | 269.9992 |
SO43705 | 1 | 2019-07-01T00:00:00Z | Curtis Lu | curtis9@adventure-works.com | Mountain-100 Silver 38 | 1 | 3399.99 | 271.9992 |
SO43700 | 1 | 2019-07-01T00:00:00Z | Ruben Prasad | ruben10@adventure-works.com | Road-650 Black 62 | 1 | 699.0982 | 55.9279 |
SO43703 | 1 | 2019-07-01T00:00:00Z | Albert Alvarez | albert7@adventure-works.com | Road-150 Red 62 | 1 | 3578.27 | 286.2616 |
SO43697 | 1 | 2019-07-01T00:00:00Z | Cole Watson | cole1@adventure-works.com | Road-150 Red 62 | 1 | 3578.27 | 286.2616 |
SO43699 | 1 | 2019-07-01T00:00:00Z | Sydney Wright | sydney61@adventure-works.com | Mountain-100 Silver 44 | 1 | 3399.99 | 271.9992 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
然后,可使用可视化工具进一步分析查询输出,或者与其他程序集成,以创建自定义仪表板和自动化工作流。
下一个示例使用 take
语句从 KQL 数据库中的 sales 表返回 5 行数据,通过该语句可在浏览数据时简单快速地查看一小部分记录。
sales
| take 5
这一次,结果包括 5 行数据:
SalesOrderNumber | SalesOrderLineItem | OrderDate | CustomerName | EmailAddress | 项 | 数量 | 单价 | TaxAmount |
---|---|---|---|---|---|---|---|---|
SO43701 | 1 | 2019-07-01T00:00:00Z | Christy Zhu | christy12@adventure-works.com | Mountain-100 Silver 44 | 1 | 3399.99 | 271.9992 |
SO43704 | 1 | 2019-07-01T00:00:00Z | Julio Ruiz | julio1@adventure-works.com | Mountain-100 Black 48 | 1 | 3374.99 | 269.9992 |
SO43705 | 1 | 2019-07-01T00:00:00Z | Curtis Lu | curtis9@adventure-works.com | Mountain-100 Silver 38 | 1 | 3399.99 | 271.9992 |
SO43700 | 1 | 2019-07-01T00:00:00Z | Ruben Prasad | ruben10@adventure-works.com | Road-650 Black 62 | 1 | 699.0982 | 55.9279 |
SO43703 | 1 | 2019-07-01T00:00:00Z | Albert Alvarez | albert7@adventure-works.com | Road-150 Red 62 | 1 | 3578.27 | 286.2616 |
使用 where
子句进行筛选
在 KQL 中,where
是一个子句,用于根据指定的条件筛选表行。 where
子句后跟一个布尔表达式,该表达式针对表中的每一行计算得出 true
或 false
。 表达式计算得到 true
的行包含在结果中,表达式计算得到 false
的行排除在外。
在查询的 where
子句中使用 contains
运算符,根据 Item 列是否包含字符串“Mountain-100”来筛选 sales 表的行。
sales
| where Item contains 'Mountain-100'
结果仅包含显示了“Mountain-100”的商品的销售:
SalesOrderNumber | SalesOrderLineItem | OrderDate | CustomerName | EmailAddress | 项 | 数量 | 单价 | TaxAmount |
---|---|---|---|---|---|---|---|---|
SO43701 | 1 | 2019-07-01T00:00:00Z | Christy Zhu | christy12@adventure-works.com | Mountain-100 Silver 44 | 1 | 3399.99 | 271.9992 |
SO43704 | 1 | 2019-07-01T00:00:00Z | Julio Ruiz | julio1@adventure-works.com | Mountain-100 Black 48 | 1 | 3374.99 | 269.9992 |
SO43705 | 1 | 2019-07-01T00:00:00Z | Curtis Lu | curtis9@adventure-works.com | Mountain-100 Silver 38 | 1 | 3399.99 | 271.9992 |
SO43699 | 1 | 2019-07-01T00:00:00Z | Sydney Wright | sydney61@adventure-works.com | Mountain-100 Silver 44 | 1 | 3399.99 | 271.9992 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
如果要处理时序数据,KQL 非常有效。 例如,筛选销售数据以显示在两个日期/时间值之间发生的订单。 有许多时序函数可供使用,其中包括 now()
,它返回当前时间。 此示例返回最后一天(24 小时)发生的所有订单。
sales
| where OrderDate between (now(-1d) .. now())
筛选结果以仅包含指定时间段内的订单。
SalesOrderNumber | SalesOrderLineItem | OrderDate | CustomerName | EmailAddress | 项 | 数量 | 单价 | TaxAmount |
---|---|---|---|---|---|---|---|---|
SO49171 | 1 | 2023-05-01T22:01:00Z | Mariah Foster | mariah21@adventure-works.com | Road-250 Black 48 | 1 | 2181.5625 | 174.525 |
SO49172 | 1 | 2021-05-01T23:55:00Z | Brian Howard | brian23@adventure-works.com | Road-250 Red 44 | 1 | 2443.35 | 195.468 |
SO49173 | 1 | 2021-05-02T01:10:00Z | Linda Alvarez | linda19@adventure-works.com | Mountain-200 Silver 38 | 1 | 2071.4196 | 165.7136 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
将查询结果排序
此查询使用 sort
运算符检索已排序的“Mountain-100”商品的销售,以便先显示最近的销售:
sales
| where Item contains 'Mountain-100'
| sort by OrderDate desc
结果类似于以下示例:
SalesOrderNumber | SalesOrderLineItem | OrderDate | CustomerName | EmailAddress | 项 | 数量 | 单价 | TaxAmount |
---|---|---|---|---|---|---|---|---|
SO43699 | 1 | 2023-05-01T00:00:00Z | Sydney Wright | sydney61@adventure-works.com | Mountain-100 Silver 44 | 1 | 3399.99 | 271.9992 |
SO43705 | 1 | 2023-04-20T00:00:00Z | Curtis Lu | curtis9@adventure-works.com | Mountain-100 Silver 38 | 1 | 3399.99 | 271.9992 |
SO43704 | 1 | 2023-04-12T00:00:00Z | Julio Ruiz | julio1@adventure-works.com | Mountain-100 Black 48 | 1 | 3374.99 | 269.9992 |
SO43701 | 1 | 2023-03-27T00:00:00Z | Christy Zhu | christy12@adventure-works.com | Mountain-100 Silver 44 | 1 | 3399.99 | 271.9992 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
汇总和聚合
可使用 summarize
运算符按列对数据进行分组,并使用该组的聚合创建新列。 例如,以下查询返回已售出的每件商品的总数量。
sales
| summarize ItemsSold= sum(Quantity) by Item
结果包括一个基于聚合函数(在本例中为 sum()
)的列
项 | ItemsSold |
---|---|
Water Bottle - 30 oz. | 2,097 |
Patch Kit/8 Patches | 1,621 |
Mountain Tire Tube | 1,581 |
Road Tire Tube | 1,212 |
... | ... |
使用 Copilot 协助查询集查询
Microsoft 实时智能工具中的一项新功能是能够使用 Copilot 实现实时智能。 使用 Copilot 能够编写自然语言提示,而无需编写或快速学习 KQL 查询。
当管理员启用 Copilot 后,可在查询集的顶部菜单栏中看到该选项。 提出有关数据的问题时,Copilot 生成 KQL 代码来回答问题。 可以使用此无代码方法在查询集中创建多个查询,以收集有用的信息供用户使用。
查询集中有查询后,可以将这些查询固定到现有仪表板或创建新的仪表板。 为此,请选择要固定的查询,然后选择“固定到仪表板”。 这可提供一个窗口来执行其他操作。
还可以通过突出显示首选查询,然后选择“生成 PowerBI 报表”,将查询集查询添加到 Power BI 报表。
注意
使用“固定到仪表板”或“生成 PowerBI 报表”一次只能选择一个查询,但可以将仪表板元素追加到现有仪表板中。