教程:联接来自多个表的数据

适用于:✅Azure 数据资源管理器Azure MonitorMicrosoft Sentinel

通过联接来自多个表的数据,可以跨源分析数据并创建数据点之间的关系。 在 Kusto 查询语言(KQL)中,使用 联接查找 运算符跨表合并数据。

本教程中,您将学习如何:

本教程中的示例使用 StormEvents 表,该表已在帮助群集中公开提供。

先决条件

在有权访问示例数据的查询环境中运行查询。 使用以下项之一:

  • Microsoft帐户或Microsoft Entra 用户标识登录到 帮助群集

使用联接运算符

Samples 数据库有两个相关的风暴事件表:StormEventsPopulationData。 在本部分中,将这些表格合并以分析无法通过单个表格进行分析的数据。

了解数据

使用 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 则有另一列显示该州人口。

联接表

PopulationDataStormEventsState上合并,以计算每个州的人均财产损失总额。

StormEvents
| summarize PropertyDamage = sum(DamageProperty) by State
| join kind=innerunique PopulationData on State
| project State, PropertyDamagePerCapita = PropertyDamage / Population
| sort by PropertyDamagePerCapita

| render columnchart 添加到查询以可视化结果。

显示各州人均财产损失的柱形图的屏幕截图。

如果列具有不同的名称(例如, StormEvents 具有 StatePopulationData 具有 StateName),请将联接指定为:

StormEvents
| join kind=innerunique PopulationData on $left.State == $right.StateName  

$left 指联接中的左侧(外部)表:StormEvents$right 指向右侧的(内部)表: PopulationData

提示

join 运算符用于许多联接类型。 请参阅 联接风格列表

使用 lookup 运算符

查找运算符优化查询过程,在查询中使用维度表的数据来丰富事实表。 它使用维度表中的值扩展事实数据表。 默认情况下,系统假定左表是较大的事实数据表,右侧表是较小的维度表。 此默认值与运算符的假设相反 join

辅助群集中包含一个名为ContosoSales的数据库,其中存有销售数据。 以下查询使用 lookupSalesFact 表与 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 仅支持两种联接风格: leftouterinner

联接查询生成的表

从同一个表联接结果。

假设你想要一个同时具有闪电和雪崩事件的状态列表。 使用联接运算符合并两个查询结果中的行,这些查询在State列上为每种事件类型返回不同的状态。

StormEvents
| where EventType == "Lightning"
| distinct State
| join kind=inner (
    StormEvents 
    | where EventType == "Avalanche"
    | distinct State
    )
    on State
| project State

输出

状态
OREGON
犹他州
怀俄明州
华盛顿州
科罗拉多州
爱达荷州
NEVADA