チュートリアル: Kusto クエリを使用する

Kusto クエリ言語について学習する最善の方法は、いくつかの基本的なクエリを見て、言語の "感覚" をつかむことです。 いくつかのサンプル データが含まれるデータベースを使用することをお勧めします。 このチュートリアルで示すクエリは、そのデータベースで実行する必要があります。 サンプル データベースの StormEvents テーブルでは、米国で発生した嵐に関する情報が提供されています。

行数のカウント

このサンプル データベースには、StormEvents という名前のテーブルがあります。 テーブルのサイズを確認します。 そのため、そのコンテンツをパイプして、テーブル内の行をカウントする演算子にします。

構文に関する注意: クエリは、データ ソース (通常はテーブル名) の後に、必要に応じてパイプ文字の 1 つ以上のペアと、表形式演算子を指定したものです。

StormEvents | count

出力は次のようになります。

Count
59066

詳細については、「count 演算子」を参照してください。

列のサブセットを選択する: project

必要な列だけを取得するには、project を使用します。 次の例を参照してください。この例では、projecttake 演算子が使用されています。

ブール式でフィルター処理を行う: where

2007 年 2 月の California における flood イベントのみを表示しましょう。

StormEvents
| where StartTime > datetime(2007-02-01) and StartTime < datetime(2007-03-01)
| where EventType == 'Flood' and State == 'CALIFORNIA'
| project StartTime, EndTime , State , EventType , EpisodeNarrative

出力は次のようになります。

StartTime EndTime 状態 EventType EpisodeNarrative
2007-02-19 00:00:00.0000000 2007-02-19 08:00:00.0000000 CALIFORNIA 洪水 A frontal system moving across the Southern San Joaquin Valley brought brief periods of heavy rain to western Kern County in the early morning hours of the 19th. Minor flooding was reported across State Highway 166 near Taft.

n 行を表示する: take

データをいくつか見てみましょう。 5 行のランダムなサンプルはどのような内容でしょうか。

StormEvents
| take 5
| project  StartTime, EndTime, EventType, State, EventNarrative  

出力は次のようになります。

StartTime EndTime EventType 状態 EventNarrative
2007-09-18 20:00:00.0000000 2007-09-19 18:00:00.0000000 Heavy Rain FLORIDA As much as 9 inches of rain fell in a 24-hour period across parts of coastal Volusia County.
2007-09-20 21:57:00.0000000 2007-09-20 22:05:00.0000000 Tornado FLORIDA A tornado touched down in the Town of Eustis at the northern end of West Crooked Lake. The tornado quickly intensified to EF1 strength as it moved north northwest through Eustis. The track was just under two miles long and had a maximum width of 300 yards. The tornado destroyed 7 homes. Twenty seven homes received major damage and 81 homes reported minor damage. There were no serious injuries and property damage was set at $6.2 million.
2007-09-29 08:11:00.0000000 2007-09-29 08:11:00.0000000 Waterspout ATLANTIC SOUTH A waterspout formed in the Atlantic southeast of Melbourne Beach and briefly moved toward shore.
2007-12-20 07:50:00.0000000 2007-12-20 07:53:00.0000000 雷雨風 MISSISSIPPI Numerous large trees were blown down with some down on power lines. Damage occurred in eastern Adams county.
2007-12-30 16:00:00.0000000 2007-12-30 16:05:00.0000000 雷雨風 GEORGIA The county dispatch reported several trees were blown down along Quincey Batten Loop near State Road 206. The cost of tree removal was estimated.

ただし、take を使用して表示されるテーブルの行は特定の順序になっていないので、並べ替えてみましょう。 (limittake の別名であり、効果は同じです)。

結果の順序を指定する: sorttop

  • 構文に関する注意: 一部の演算子には、のようなキーワードで導入されたパラメーターがあり ます。
  • 次の例では、desc を指定すると結果が降順に並べ替えられ、asc を指定すると結果が昇順に並べ替えられます。

特定の列で並べ替えた最初の n 行を表示します。

StormEvents
| top 5 by StartTime desc
| project  StartTime, EndTime, EventType, State, EventNarrative  

出力は次のようになります。

StartTime EndTime EventType 状態 EventNarrative
2007-12-31 22:30:00.0000000 2007-12-31 23:59:00.0000000 Winter Storm ミシガン This heavy snow event continued into the early morning hours on New Year's Day.
2007-12-31 22:30:00.0000000 2007-12-31 23:59:00.0000000 Winter Storm ミシガン This heavy snow event continued into the early morning hours on New Year's Day.
2007-12-31 22:30:00.0000000 2007-12-31 23:59:00.0000000 Winter Storm ミシガン This heavy snow event continued into the early morning hours on New Year's Day.
2007-12-31 23:53:00.0000000 2007-12-31 23:53:00.0000000 High Wind CALIFORNIA North to northeast winds gusting to around 58 mph were reported in the mountains of Ventura county.
2007-12-31 23:53:00.0000000 2007-12-31 23:53:00.0000000 High Wind CALIFORNIA The Warm Springs RAWS sensor reported northerly winds gusting to 58 mph.

sort を使用してから take を使用することにより、同じ結果を得ることができます。

StormEvents
| sort by StartTime desc
| take 5
| project  StartTime, EndTime, EventType, EventNarrative

派生列を計算する: extend

すべての行の値を計算することにより、新しい列を作成します。

StormEvents
| limit 5
| extend Duration = EndTime - StartTime 
| project StartTime, EndTime, Duration, EventType, State

出力は次のようになります。

StartTime EndTime Duration EventType 状態
2007-09-18 20:00:00.0000000 2007-09-19 18:00:00.0000000 22:00:00 Heavy Rain FLORIDA
2007-09-20 21:57:00.0000000 2007-09-20 22:05:00.0000000 00:08:00 Tornado FLORIDA
2007-09-29 08:11:00.0000000 2007-09-29 08:11:00.0000000 00:00:00 Waterspout ATLANTIC SOUTH
2007-12-20 07:50:00.0000000 2007-12-20 07:53:00.0000000 00:03:00 雷雨風 MISSISSIPPI
2007-12-30 16:00:00.0000000 2007-12-30 16:05:00.0000000 00:05:00 雷雨風 GEORGIA

列の名前を再利用し、計算結果を同じ列に割り当てることができます。

例:

print x=1
| extend x = x + 1, y = x
| extend x = x + 1

出力は次のようになります。

x y
3 1

スカラー式 には、通常の演算子 (、、、、) をすべて含めることができ、 便利な -*/% 関数の範囲を使用できます。

行のグループを集計する: summarize

各州で発生したイベントの数をカウントします。

StormEvents
| summarize event_count = count() by State

句で同じ値を持つ行をグループ化 し、集計関数 (など) を使用して、 count 各グループを1つの行に結合します。 この例では、州ごとに 1 つの行があり、その州の行数用の列が 1 つあります。

さまざまな集計関数を使用できます。 1 つの summarize 演算子で複数の集計関数を使用して、複数の計算列を生成できます。 たとえば、州ごとのストームの数や、州ごとの落雷の種類の合計を取得できます。 次に、top を使用して、嵐の影響を最も受ける州を取得できます。

StormEvents 
| summarize StormCount = count(), TypeOfStorms = dcount(EventType) by State
| top 5 by StormCount desc

出力は次のようになります。

状態 StormCount TypeOfStorms
テキサス州 4701 27
KANSAS 3166 21
アイオワ州 2337 19
ILLINOIS 2022 23
MISSOURI 2016 20

summarize 演算子の結果では、次のようになります。

  • 各列の名前は by で指定します。
  • 計算式ごとに 1 つの列があります。
  • by の値の組み合わせごとに 1 つの行があります。

スカラー値による集計

句ではスカラー (数値、時刻、または間隔) の値を使用でき by ますが、 by 関数を使用して値をビンに入れることをお勧めします。

StormEvents
| where StartTime > datetime(2007-02-14) and StartTime < datetime(2007-02-21)
| summarize event_count = count() by bin(StartTime, 1d)

このクエリにより、すべてのタイムスタンプが 1 日の間隔の数に削減されます。

StartTime event_count
2007-02-14 00:00:00.0000000 180
2007-02-15 00:00:00.0000000 66
2007-02-16 00:00:00.0000000 164
2007-02-17 00:00:00.0000000 103
2007-02-18 00:00:00.0000000 22
2007-02-19 00:00:00.0000000 52
2007-02-20 00:00:00.0000000 60

bin() は、多くの言語の floor() 関数と同じです。 すべての値が指定した剰余の最も近い倍数にまとめられ、summarize でグループに行を割り当てることができるようになります。

グラフまたはテーブルを表示する: render

2 つの列へのプロジェクションを行い、それらをグラフの x 軸と y 軸として使用することができます。

StormEvents 
| summarize event_count=count(), mid = avg(BeginLat) by State 
| sort by mid
| where event_count > 1800
| project State, event_count
| render columnchart

Screenshot that shows a column chart of storm event counts by state.

project 操作で mid を削除しましたが、その順序でグラフに州を表示する場合はそれがまだ必要です。

厳密に言えば、render はクエリ言語の一部ではなくクライアントの機能です。 それでも、言語に統合されており、結果を構想するのに役立ちます。

時間グラフ

数値ビンに戻り、時系列を表示してみましょう。

StormEvents
| summarize event_count=count() by bin(StartTime, 1d)
| render timechart

Screenshot of a line chart of events binned by time.

複数の系列

値の組み合わせごとに別の行を作成する場合は、以下のように、 summarize by 句で複数の値を使用します。

StormEvents 
| where StartTime > datetime(2007-06-04) and StartTime < datetime(2007-06-10) 
| where Source in ("Source","Public","Emergency Manager","Trained Spotter","Law Enforcement")
| summarize count() by bin(StartTime, 10h), Source

Screenshot that shows a table count by source.

前の例に render を追加するだけです: | render timechart

Screenshot that shows a line chart count by source.

render timechart で最初の列が x 軸として使用され、他の列が個別の線として表示されることに注意してください。

日次平均サイクル

ここでは、アクティビティが平均的な日にどのように変わるかを見てみます。

1 日の時間モジュロでイベントをカウントし、時間単位でビン分割します。 ここでは、bin ではなく floor を使用します。

StormEvents
| extend hour = floor(StartTime % 1d , 1h)
| summarize event_count=count() by hour
| sort by hour asc
| render timechart

Screenshot that shows a timechart count by hour.

現在、render を使用すると期間に適切にラベルが付きませんが、代わりに | render columnchart を使用できます。

Screenshot that shows a column chart count by hour.

複数の日次系列の比較

ここでは、アクティビティがさまざまな州で時間帯によってどのように変わるかを見てみます。

StormEvents
| extend hour= floor( StartTime % 1d , 1h)
| where State in ("GULF OF MEXICO","MAINE","VIRGINIA","WISCONSIN","NORTH DAKOTA","NEW JERSEY","OREGON")
| summarize event_count=count() by hour, State
| render timechart

Screenshot of a timechart by hour and state.

x 軸を期間ではなく時間の数値にするには、1h で除算します。

StormEvents
| extend hour= floor( StartTime % 1d , 1h)/ 1h
| where State in ("GULF OF MEXICO","MAINE","VIRGINIA","WISCONSIN","NORTH DAKOTA","NEW JERSEY","OREGON")
| summarize event_count=count() by hour, State
| render columnchart

Screenshot that shows a column chart by hour and state.

データ型を結合する

2 つの特定のイベントの種類と、それぞれが発生している州を調べるには、どうすればよいでしょうか。

1 番目の EventType と 2 番目の EventType で嵐イベントを取得し、State で 2 つのセットを結合することができます。

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

Screenshot that shows joining the events lightning and avalanche.

join のユーザー セッションの例

このセクションでは、StormEvents テーブルは使用しません。

各ユーザー セッションの開始と終了を一意の ID でマークするイベントを含むデータが含まれるとします。

各ユーザー セッションの継続時間を調べるには、どうすればよいでしょうか。

extend を使用して 2 つのタイムスタンプに別名を指定してから、セッションの継続時間を計算できます。

Events
| where eventName == "session_started"
| project start_time = timestamp, stop_time, country, session_id
| join ( Events
    | where eventName == "session_ended"
    | project stop_time = timestamp, session_id
    ) on session_id
| extend duration = stop_time - start_time
| project start_time, stop_time, country, duration
| take 10

Screenshot of a table of results for user session extend.

結合を実行する前に、 を使用して関連する列を選択 project してください。 同じ句で、列の名前を timestamp 変更します。

分布のプロット

StormEvents テーブルに戻り、長さごとに嵐の発生件数を調べます。

StormEvents
| extend  duration = EndTime - StartTime
| where duration > 0s
| where duration < 3h
| summarize event_count = count()
    by bin(duration, 5m)
| sort by duration asc
| render timechart

Screenshot of timechart results for event count by duration.

または、| render columnchart を使用することもできます。

Screenshot of a column chart for event count timechart by duration.

パーセンタイル

期間の範囲ごとの嵐の割合はどうなっているでしょうか。

この情報を取得するには、「ディストリビューションをプロットする」で前のクエリを使用 しますが、 を次に置き 換える必要があります。

| summarize percentiles(duration, 5, 20, 50, 80, 95)

この例では、by 句を使用しなかったため、出力は単一行になります。

Screenshot of a table of results for summarize percentiles by duration.

出力から次のことがわかります。

  • 嵐の 5% の期間は 5 分未満である。
  • 50% のストームは 1 時間 25 分未満でした。
  • 95% のストームが 2 時間 50 分未満で続いた。

州ごとの個別の内訳を取得するには、両方の summarize 演算子で state 列を個別に使用します。

StormEvents
| extend  duration = EndTime - StartTime
| where duration > 0s
| where duration < 3h
| summarize event_count = count()
    by bin(duration, 5m), State
| sort by duration asc
| summarize percentiles(duration, 5, 20, 50, 80, 95) by State

Table summarize percentiles duration by state.

パーセント

StormEvents テーブルを使用して、すべてのけが人の直接のけがの割合を計算できます。

StormEvents
| where (InjuriesDirect > 0) and (InjuriesIndirect > 0) 
| extend Percentage = (  100 * InjuriesDirect / (InjuriesDirect + InjuriesIndirect) )
| project StartTime, InjuriesDirect, InjuriesIndirect, Percentage

このクエリは、ゼロ カウント エントリを削除します。

StartTime DirectesDirect にちなみIndirect パーセント
2007-05-01T16:50:00Z 1 1 50
2007-08-10T21:25:00Z 7 2 77
2007-08-23T12:05:00Z 7 22 24
2007-08-23T14:20:00Z 3 2 60
2007-09-10T13:45:00Z 4 1 80
2007-12-06T08:30:00Z 3 3 50
2007-12-08T12:00:00Z 1 1 50

結果を変数に代入する: let

の例 のクエリ式の部分を分離するには、let を使用 します。 結果は変わりません。

let LightningStorms = 
    StormEvents
    | where EventType == "Lightning";
let AvalancheStorms = 
    StormEvents
    | where EventType == "Avalanche";
LightningStorms 
| join (AvalancheStorms) on State
| distinct State

ヒント

Kusto Explorer でクエリ全体を実行するには、クエリの各部分の間に空白行を追加しないでください。 2 つのステートメントは、セミコロンで区切る必要があります。

1 つのクエリで複数のデータベースのデータを結合する

次のクエリの Logs テーブルは、既定のデータベースに存在している必要があります。

Logs | where ...

異なるデータベース内のテーブルにアクセスするには、次の構文を使用します。

database("db").Table

たとえば、Diagnostics および Telemetry という名前のデータベースがあり、2 つのテーブルの一部のデータを関連付ける場合は、次のクエリを使用できます (Diagnostics が既定のデータベースであるとします)。

Logs | join database("Telemetry").Metrics on Request MachineId | ...

既定のデータベースが Telemetry である場合は、次のクエリを使用します。

union Requests, database("Diagnostics").Logs | ...

前に示した 2 つのクエリでは、両方のデータベースが現在接続しているクラスター内にあることを前提としています。 データベースが Telemetry という名前のクラスター内に Telemetryアクセスするには、次のクエリを使用します。

Logs | join cluster("TelemetryCluster").database("Telemetry").Metrics on Request MachineId | ...

注意

クラスターを指定するときは、データベースが必須です。

1 つのクエリで複数のデータベースのデータを結合する方法の詳細については、複数のデータベースにまたがるクエリに関するページを参照してください。

次のステップ

クエリ言語に関する最もAzure Data Explorerは、いくつかの基本的なクエリを見て、言語の "感じ" を得る方法です。 これらのクエリは、Azure データエクスプローラーチュートリアルのクエリに似ていますが、Azure Log Analytics ワークスペースの共通テーブルのデータを使用します。

Azure portal で Log Analytics を使用して、これらのクエリを実行します。 Log Analytics は、ログ クエリを記述するために使用できるツールです。 Azure Monitor でログ データを使用してから、ログ クエリの結果を評価します。 Log Analytics に慣れていない場合は、Log Analytics のチュートリアルを済ませてください。

このチュートリアルのすべてのクエリでは、Log Analytics のデモ環境を使用します。 独自の環境を使用してもかまいませんが、ここで使用されているテーブルの一部がない可能性があります。 デモ環境のデータは静的ではないため、自分で行ったクエリの結果は、ここに示されている結果と多少異なる場合があります。

行数のカウント

InsightsMetrics テーブルには、Azure Monitor for VMs や Azure Monitor for containers のような分析情報によって収集されたパフォーマンス データが含まれています。 テーブルのサイズを調べるには、その内容を行をカウントする演算子にパイプします。

クエリは、データソース (通常はテーブル名) で、必要に応じてパイプ文字の1つ以上のペアと、表形式演算子を指定します。 この場合、テーブルのすべてのレコード InsightsMetrics が返され、 InsightsMetricsに送信されます。 count 演算子がクエリの最後のコマンドであるため、その演算子によって結果が表示されます。

InsightsMetrics | count

出力は次のようになります。

Count
1,263,191

ブール式でフィルター処理を行う: where

Azureactivityテーブルには、azure で発生したサブスクリプションレベルまたは管理グループレベルのイベントに関する洞察を提供する、azure アクティビティログのエントリが含まれています。 特定の週の Critical エントリだけを表示してみましょう。

where 演算子は Kusto クエリ言語でよく使用されます。 where によってテーブルがフィルター処理され、特定の条件に一致する行だけになります。 次の例では、複数のコマンドを使用します。 最初に、クエリでテーブルのすべてのレコードを取得します。 次に、データをフィルター処理し、ある時間範囲内のレコードだけを取得します。 最後に、それらの結果をフィルター処理して、Critical レベルのレコードのみを取得します。

注意

TimeGenerated 列を使用してクエリでフィルターを指定するだけでなく、Log Analytics で時間の範囲を指定することもできます。 詳細については、「Azure Monitor Log Analytics のログ クエリのスコープと時間範囲」を参照してください。

AzureActivity
| where TimeGenerated > datetime(10-01-2020) and TimeGenerated < datetime(10-07-2020)
| where Level == 'Critical'

Screenshot that shows the results of the where operator example.

列のサブセットを選択する: project

必要な列だけを含めるには、project を使用します。 前の例を基にして、出力を特定の列に限定してみましょう。

AzureActivity
| where TimeGenerated > datetime(10-01-2020) and TimeGenerated < datetime(10-07-2020)
| where Level == 'Critical'
| project TimeGenerated, Level, OperationNameValue, ResourceGroup, _ResourceId

Screenshot that shows the results of the project operator example.

n 行を表示する: take

NetworkMonitoring には、Azure 仮想ネットワークの監視データが格納されています。 Take演算子を使用して、そのテーブル内のランダムなサンプル行を10個検索してみましょう。 Takeは、特定の順序でテーブルからいくつかの行を表示します。

NetworkMonitoring
| take 10
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

Screenshot that shows the results of the take operator example.

結果の順序を指定する: sorttop

最初に時間順に並べ替えることにより、ランダムなレコードではなく、最新の 5 つのレコードを取得できます。

NetworkMonitoring
| sort by TimeGenerated desc
| take 5
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

代わりに top 演算子を使用することで、この動作を正確に実現できます。

NetworkMonitoring
| top 5 by TimeGenerated desc
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

Screenshot that shows the results of the top operator example.

派生列を計算する: extend

extend 演算子は project に似ていますが、列のセットを置き換えるのではなく、列のセットに追加します。 両方の演算子を使用して、各行の計算に基づく新しい列を作成できます。

Perf テーブルには、Log Analytics エージェントが実行されている仮想マシンから収集されたパフォーマンス データが格納されています。

Perf
| where ObjectName == "LogicalDisk" and CounterName == "Free Megabytes"
| project TimeGenerated, Computer, FreeMegabytes = CounterValue
| extend FreeGigabytes = FreeMegabytes / 1000

Screenshot that shows the results of the extend operator example.

行のグループを集計する: summarize

集計演算子は、句内で同じ値を持つ行をグループ化し ます。 次に、count のような集計関数を使用して、各グループを 1 つの行に結合します。 さまざまな集計関数を使用できます。 1 つの summarize 演算子で複数の集計関数を使用して、複数の計算列を生成できます。

SecurityEvent テーブルには、監視対象のコンピューターで開始されたログオンやプロセスなどのセキュリティ イベントが格納されています。 各コンピューターで発生したイベントの数をレベルごとにカウントできます。 この例では、コンピューターとレベルの組み合わせごとに 1 つの行が生成されます。 列には、イベントの数が格納されます。

SecurityEvent
| summarize count() by Computer, Level

Screenshot that shows the results of the summarize count operator example.

スカラー値による集計

数や時刻の値のようなスカラー値で集計できますが、 bin() 関数を使用して、行を個別のデータ セットにグループ化する必要があります。 たとえば、によって集計した場合、 TimeGenerated ほとんどの時間値に対して行が取得されます。 bin()1 時間または1日の値を統合するために使用します。

InsightsMetricsテーブルには、Azure Monitor for VMs からの洞察とコンテナーの Azure Monitor に基づいて編成されたパフォーマンスデータが含まれています。 次のクエリを実行すると、複数のコンピューターについて 1 時間ごとの平均プロセッサ使用率が表示されます。

InsightsMetrics
| where Computer startswith "DC"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)

Screenshot that shows the results of the avg operator example.

グラフまたはテーブルを表示する: render

render 演算子では、クエリの出力のレンダリング方法を指定します。 既定では、Log Analytics による出力はテーブルとしてレンダリングされます。 クエリを実行した後、さまざまな種類のグラフを選択できます。 特定のグラフの種類が通常優先されるクエリには、render 演算子を含めると便利です。

次の例を実行すると、1 つのコンピューターについて 1 時間ごとの平均プロセッサ使用率が表示されます。 出力は時間グラフとしてレンダリングされます。

InsightsMetrics
| where Computer == "DC00.NA.contosohotels.com"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)
| render timechart

Screenshot that shows the results of the render operator example.

複数の系列を使用する

summarize by 句で複数の値を使用すると、グラフには、値のセットごとに個別の系列が表示されます。

InsightsMetrics
| where Computer startswith "DC"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)
| render timechart

Screenshot that shows the results of the render operator with multiple series example.

2 つのテーブルのデータを結合する

1 つのクエリで 2 つのテーブルからデータを取得する必要がある場合はどうすればよいでしょうか。 join 演算子を使用すると、複数のテーブルの行を 1 つの結果セットに結合できます。 join で一致させる行がわかるように、各テーブルに一致する値を持つ列が含まれる必要があります。

VMComputer は、監視対象の仮想マシンに関する詳細を格納するために Azure Monitor で VM に使用されるテーブルです。 InsightsMetrics には、それらの仮想マシンから収集されたパフォーマンス データが格納されます。 InsightsMetrics に収集される 1 つの値は使用可能なメモリであり、使用可能なメモリの割合ではありません。 割合を計算するには、各仮想マシンの物理メモリが必要です。 その値は VMComputer にあります。

次のクエリ例では、join を使用してこの計算を実行します。 Distinct演算子は、 各コンピューターから詳細情報が定期的に収集されるため、と共に使用されます。 その結果、テーブルにはコンピューターごとに複数の行が含まれます。 2つのテーブルは、列を使用して結合され Computer ます。 の行ごとに両方のテーブルの列を含む行が結果セットに作成されます。この場合、の値は、 InsightsMetricsComputer の列の値と同じに ComputerVMComputer なります。

VMComputer
| distinct Computer, PhysicalMemoryMB
| join kind=inner (
    InsightsMetrics
    | where Namespace == "Memory" and Name == "AvailableMB"
    | project TimeGenerated, Computer, AvailableMemoryMB = Val
) on Computer
| project TimeGenerated, Computer, PercentMemory = AvailableMemoryMB / PhysicalMemoryMB * 100

Screenshot that shows the results of the join operator example.

結果を変数に代入する: let

クエリの読み取りと管理を簡単にするには、let を使用します。 この演算子を使用すると、変数にクエリの結果を代入し、後で使用することができます。 let ステートメントを使用すると、前の例のクエリを次のように書き換えることができます。

let PhysicalComputer = VMComputer
    | distinct Computer, PhysicalMemoryMB;
let AvailableMemory = InsightsMetrics
    | where Namespace == "Memory" and Name == "AvailableMB"
    | project TimeGenerated, Computer, AvailableMemoryMB = Val;
PhysicalComputer
| join kind=inner (AvailableMemory) on Computer
| project TimeGenerated, Computer, PercentMemory = AvailableMemoryMB / PhysicalMemoryMB * 100

Screenshot that shows the results of the let operator example.

次のステップ