次の方法で共有


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

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft Sentinel

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

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

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

このチュートリアルの例では、 StormEvents テーブルを使用します。このテーブルは、 Weather analytics サンプル データで一般公開されています。

前提条件

次のクエリを実行するには、サンプル データにアクセスできるクエリ環境が必要です。 次のいずれかを使用します。

join 演算子を使用する

Samples データベースには、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 12,554 68796 MISSISSIPPI 雷雨風 ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 ジョージア 雷雨風 ...
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

出力

都道府県 人口
ALABAMA 4918690
ALASKA 727951
アリゾナ 7399410
アーカンソー 3025880
CALIFORNIA 39562900

両方のテーブルに State 列が含まれています。 StormEvents テーブルにはさらに多くの列があり、PopulationDataには、指定された状態の作成を含む他の列が 1 つだけあります。

テーブルを結合する

PopulationData テーブルと共通のState列の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演算子で実行できる結合には、さまざまな種類があります。 結合フレーバーの リストを参照してください

検索演算子を使用する

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
[Computers (コンピューター)] 313487
家電製品 237508
Audio 192671
携帯電話 50342
音楽、映画、オーディオ ブック 33376

Note

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

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

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

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

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

出力

都道府県
オレゴン
UTAH
WYOMING
WASHINGTON
コロラド
アイダホ
ネバダ