通过联接来自多个表的数据,可以跨源分析数据并创建数据点之间的关系。 在 Kusto 查询语言(KQL)中,使用 联接 和 查找 运算符跨表合并数据。
本教程中,您将学习如何:
本教程中的示例使用 StormEvents
表,该表已在帮助群集中公开提供。
先决条件
在有权访问示例数据的查询环境中运行查询。 使用以下项之一:
- Microsoft帐户或Microsoft Entra 用户标识登录到 帮助群集
使用联接运算符
Samples 数据库有两个相关的风暴事件表: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
添加到查询以可视化结果。
如果列具有不同的名称(例如, StormEvents
具有 State
和 PopulationData
具有 StateName
),请将联接指定为:
StormEvents
| join kind=innerunique PopulationData on $left.State == $right.StateName
$left
指联接中的左侧(外部)表:StormEvents
。
$right
指向右侧的(内部)表: PopulationData
。
提示
将 join
运算符用于许多联接类型。 请参阅 联接风格列表。
使用 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
。
联接查询生成的表
从同一个表联接结果。
假设你想要一个同时具有闪电和雪崩事件的状态列表。 使用联接运算符合并两个查询结果中的行,这些查询在State
列上为每种事件类型返回不同的状态。
StormEvents
| where EventType == "Lightning"
| distinct State
| join kind=inner (
StormEvents
| where EventType == "Avalanche"
| distinct State
)
on State
| project State
输出
状态 |
---|
OREGON |
犹他州 |
怀俄明州 |
华盛顿州 |
科罗拉多州 |
爱达荷州 |
NEVADA |
相关内容
- 了解不同类型的 联接运算符。
- 执行 跨数据库和跨群集查询。
- 按照 “创建地理空间可视化” 教程进行作。