チュートリアル: 複数のテーブルからデータを結合する

複数のテーブルからデータを結合すると、さまざまなソースからの情報を組み合わせ、データ ポイント間に新しいリレーションシップを作成することで、より包括的な分析を行うことができます。 Kusto 照会言語 (KQL) では、結合演算子と参照演算子を使用して、テーブル間でデータを結合します。

このチュートリアルで学習する内容は次のとおりです。

このチュートリアルの例では、一般公開されている ヘルプ クラスターを使用します。 独自のデータを使用して探索するには、 独自の無料クラスターを作成します

前提条件

  • ヘルプ クラスターにサインインするための Microsoft アカウントまたはMicrosoft Entraユーザー ID

join 演算子を使用する

サンプル データベースには、Storm イベントに関連する 2 つのテーブルがあります。 1 つは と呼ばれ StormEvents 、もう 1 つは と呼ばれます PopulationData。 このセクションでは、テーブルを結合して、1 つのテーブルだけでは不可能なデータ分析を実行します。

データを理解する

take 演算子を使用して、各テーブルに含まれるデータを確認します。

StormEvents 
| take 5

次の表は、返される 22 個の列のうち 6 つだけを示しています。

StartTime EndTime EpisodeId EventId 状態 EventType ...
2007-09-20T21:57:00Z 2007-09-20T22:05:00Z 11078 60913 FLORIDA Tornado ...
2007-12-20T07:50:00Z 2007-12-20T07:53:00Z 12554 68796 MISSISSIPPI 雷雨風 ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 GEORGIA 雷雨風 ...
2007-09-29T08:11:00Z 2007-09-29T08:11:00Z 11091 61032 ATLANTIC SOUTH Waterspout ...
2007-09-18T20:00:00Z 2007-09-19T18:00:00Z 11074 60904 FLORIDA Heavy Rain ...
PopulationData 
| take 5

出力

State [母集団]
ALABAMA 4918690
ALASKA 727951
ARIZONA 7399410
ARKANSAS 3025880
CALIFORNIA 39562900

両方のテーブルに列が State 含まれています。 テーブル StormEvents にはさらに多くの列があり PopulationData 、 には、指定された状態の母集団を含む他の列が 1 つしかありません。

テーブルを結合する

共通State列の PopulationData テーブルを とStormEvents結合して、州別の一人当たりの嵐によって引き起こされたプロパティの損害の合計を見つけます。

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して、このデータベースの テーブルと Products テーブルをマージSalesFactして、製品カテゴリ別の売上合計を取得します。

SalesFact
| lookup Products on ProductKey
| summarize TotalSales = count() by ProductCategoryName
| order by TotalSales desc

出力

ProductCategoryName TotalSales
ゲームと玩具 966782
テレビとビデオ 715024
カメラとカムコーダー 323003
[Computers (コンピューター)] 313487
家庭電化製品 237508
オーディオ 192671
携帯電話 50342
音楽、映画、およびオーディオ ブック 33376

注意

演算子はlookup、 と innerの 2 つの結合フレーバーleftouterのみをサポートします。

クエリによって生成されたテーブルを結合する

結合は、同じテーブルからのクエリ結果に基づいて行うこともできます。

稲妻と雪崩の両方のイベントが発生した状態の一覧を作成するとします。 結合演算子を使用して、2 つのテーブルの行 (1 つは稲妻イベントのデータを含み、もう 1 つは雪崩イベントのデータを含む) の行を State 列に基づいてマージします。

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

出力

State
オレゴン
ユタ 州
WYOMING
WASHINGTON
コロラド
アイダホ
ネバダ