チュートリアル: 複数のテーブルのデータを結合する
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
複数のテーブルからデータを結合すると、さまざまなソースからの情報を結合し、データ ポイント間に新しいリレーションシップを作成することで、より包括的な分析が可能になります。 Kusto 照会言語 (KQL) では、join および lookup 演算子を使用して、テーブル間でデータを結合します。
このチュートリアルで学習する内容は次のとおりです。
このチュートリアルの例では、 StormEvents
テーブルを使用します。このテーブルは、 help クラスターで一般公開されています。 独自のデータを使用して探索するには、独自の無料クラスターを作成。
このチュートリアルの例では、 StormEvents
テーブルを使用します。このテーブルは、 Weather analyticsサンプル データで一般公開されています。
前提条件
次のクエリを実行するには、サンプル データにアクセスできるクエリ環境が必要です。 次のいずれかを使用します。
- Microsoft アカウントまたは Microsoft Entra ユーザー ID
- Fabric ワークスペース Microsoft Fabric 対応の capacity
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
テーブルと共通の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 |
[Computers (コンピューター)] | 313487 |
家電製品 | 237508 |
Audio | 192671 |
携帯電話 | 50342 |
音楽、映画、オーディオ ブック | 33376 |
Note
lookup
演算子は、leftouter
とinner
の 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 |
コロラド |
アイダホ |
ネバダ |