Share via


教學課程:聯結多個數據表的數據

從多個數據表聯結數據可藉由結合不同來源的資訊,以及建立數據點之間的新關聯性,來提供更完整的分析。 在 Kusto 查詢語言 (KQL) 中,聯結查閱運算符是用來跨數據表合併數據。

在本教學課程中,您將了解如何:

本教學課程中的範例會使用可公開取得 的說明 叢集。 若要使用您自己的數據進行探索, 請建立您自己的免費叢集

必要條件

  • 用來登入說明叢集的 Microsoft 帳戶或 Microsoft Entra 使用者身分識別

使用聯結運算子

Samples 資料庫中有兩個與 storm 事件相關的數據表。 其中一個稱為 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 密西西比州 Thunderstorm Wind ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 喬治亞州 Thunderstorm Wind ...
2007-09-29T08:11:00Z 2007-09-29T08:11:00Z 11091 61032 大西洋南部 水龍捲 ...
2007-09-18T20:00:00Z 2007-09-19T18:00:00Z 11074 60904 佛羅里達州 暴雨 ...
PopulationData 
| take 5

輸出

State 母體
ALABAMA 4918690
阿拉斯加州 727951
亞利桑那州 7399410
阿肯色州 3025880
加利福尼亞州 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 許多類型的聯結。 請參閱 聯結類別清單

使用查閱運算子

查閱運算符會優化查詢的效能,其中事實數據表會利用維度數據表的數據進行擴充。 其會使用在維度資料表中查閱的值來擴充事實資料表。 為了獲得最佳效能,系統預設會假設左數據表是較大的事實數據表,而右數據表則是較小的維度數據表。 這與假設使用 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 只支援兩種聯結類別: leftouterinner

聯結查詢產生的數據表

聯結也可以根據來自相同數據表的查詢結果來完成。

假設您想要建立同時發生閃電和雪道事件的狀態清單。 使用聯結運算符,根據數據行合併兩個數據表的數據列,一個包含閃電事件的數據,另一個包含雪雪事件 State 的數據。

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

輸出

State
俄勒岡州
猶他州
WYOMING
WASHINGTON
科羅拉多州
愛達荷州
內華達州