教程:联接多个表中的数据
联接多个表中的数据可以通过组合不同源中的信息并在数据点之间创建新关系来执行更全面的分析。 在 Kusto 查询语言 (KQL) 中,join 和 lookup 运算符用于组合不同表中的数据。
本教程介绍以下操作:
本教程中的示例使用 StormEvents
表,该表已在帮助群集中公开提供。
先决条件
若要运行以下查询,需要一个有权访问示例数据的查询环境。 你可以使用以下项之一:
- 用于登录到帮助群集的 Microsoft 帐户或 Microsoft Entra 用户标识
使用联接运算符
示例数据库中有两个与风暴事件相关的表。 一个表名为 StormEvents
,另一个表名为 PopulationData
。 在本部分,你将联接这两个表以执行数据分析,而单独使用一个表做不到这一点。
了解数据
使用 take 运算符查看每个表包含的数据。
StormEvents
| take 5
下表仅显示了 22 个返回列中的 6 个。
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 | 佛罗里达州 | 暴雨 | ... |
PopulationData
| take 5
输出
状态 | 人口数 |
---|---|
ALABAMA | 4918690 |
ALASKA | 727951 |
ARIZONA | 7399410 |
ARKANSAS | 3025880 |
CALIFORNIA | 39562900 |
这两个表都包含 State
列。 StormEvents
表包含其他许多列,而 PopulationData
表只包含另外一列,该列包含给定州的人口。
联接表
将 PopulationData
表与公有列 StormEvents
中的 State
相联接,以查找风暴在各州造成的人均总财产损失。
StormEvents
| summarize PropertyDamage = sum(DamageProperty) by State
| join kind=innerunique PopulationData on State
| project State, PropertyDamagePerCapita = PropertyDamage / Population
| sort by PropertyDamagePerCapita
将 | render columnchart
添加到查询以可视化结果。
提示
可以使用 join
运算符执行多种类型的联接。 参阅联接风格列表。
使用 lookup 运算符
lookup 运算符优化查询的性能,在这些查询中,已使用维度表中的数据扩充了事实数据表。 它使用在维度表中查找的值扩展事实数据表。 为获得最佳性能,系统默认情况下假定左表是较大的事实数据表,右表是较小的维度表。 这与 join
运算符使用的假设完全相反。
在帮助群集中,还有另一个名为 ContosoSales
的数据库,其中包含销售数据。 以下查询使用 lookup
合并此数据库中的 SalesFact
和 Products
表,以获取按产品类别列出的总销售额。
SalesFact
| lookup Products on ProductKey
| summarize TotalSales = count() by ProductCategoryName
| order by TotalSales desc
输出
ProductCategoryName | TotalSales |
---|---|
游戏和玩具 | 966782 |
电视和视频 | 715024 |
相机和摄像机 | 323003 |
计算机 | 313487 |
家用电器 | 237508 |
音频 | 192671 |
手机 | 50342 |
音乐、电影和有声读物 | 33376 |
注意
lookup
运算符仅支持两种联接风格:leftouter
和 inner
。
联接查询生成的表
还可以根据同一个表的查询结果进行联接。
假设你要创建同时发生了闪电和雪崩事件的州的列表。 使用 join 运算符基于 State
列合并两个表的行 – 一个表包含闪电事件的数据,另一个表包含雪崩事件的数据。
StormEvents
| where EventType == "Lightning"
| distinct State
| join kind=inner (
StormEvents
| where EventType == "Avalanche"
| distinct State
)
on State
| project State
输出
状态 |
---|
OREGON |
犹他州 |
怀俄明州 |
华盛顿州 |
科罗拉多州 |
爱达荷州 |
NEVADA |
相关内容
- 了解不同类型的联接操作符
- 了解如何执行跨数据库和跨群集的查询
- 参阅创建地理空间可视化效果教程