KQL を使用してクエリを記述する

完了

KQL データベース内のテーブルのデータのクエリを実行するには、Kusto 照会言語 (KQL) を使用します。これは、Azure Data Explorer、Azure Monitor Log Analytics、Azure Sentinel、Azure Fabric でクエリを記述するために使用されます。 KQL は、データを処理して結果を返す読み取り専用の要求です。 KQL クエリは 1 つ以上のクエリ ステートメントで構成します。

クエリ ステートメントは、テーブル名の後に、データの takefiltertransformaggregate、または join を行う 1 つ以上の演算子で構成します。 次に例を示します。

KQL クエリは、関係演算子を使用して作成し、SQL に似た構文を使用してデータをフィルター処理および変換します。 ただし、KQL 構文には、高度なテキストとパターン マッチング、統計分析、時系列予測、地理空間、機械学習アルゴリズムを有効にする拡張機能が含まれています。

KQL でテーブルを作成して読み込む

ほとんどの場合、Microsoft Fabric のグラフィカル ツールを使用してテーブルを作成し、そのソースを定義します。 ただし、KQL ステートメントを使用してテーブルを作成および読み込むことができます。

テーブルを作成してデータを取り込むには、.create table コマンドを使用して、スキーマを指定し、新しい空のテーブルを作成します。 テーブル名、列名とそのデータ型、また必要に応じて docstring や folder などの一部のプロパティを指定する必要があります。 次に例を示します。

 .create table sales (
     SalesOrderNumber: string,
     SalesOrderLineItem: int,
     OrderDate: datetime,
     CustomerName: string,
     EmailAddress: string,
     Item: string,
     Quantity: int,
     UnitPrice: real,
     TaxAmount: real)

このコマンドを使用して、データ型が異なる 9 列の sales というテーブルを作成します。

こちらの例に示すように、ingest into コマンドなど、複数の方法でテーブルにデータを取り込むことができます。

 .ingest into table sales 'https://<StorageAccountName>.blob.core.windows.net/container/<TableName>.csv' 
 with (ignoreFirstRecord = true)

テーブルからデータを取得する

基本的な KQL クエリは、テーブルからデータを選択し、そのデータにフィルターと変換を適用することで構成します。 次の例では、sales テーブルのすべてのデータに対して単にクエリを実行します。

sales

このクエリの出力は次の例のようになります。

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Item Quantity UnitPrice TaxAmount
SO43701 1 2019-07-01T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43704 1 2019-07-01T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43705 1 2019-07-01T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43700 1 2019-07-01T00:00:00Z Ruben Prasad ruben10@adventure-works.com Road-650 Black 62 1 699.0982 55.9279
SO43703 1 2019-07-01T00:00:00Z Albert Alvarez albert7@adventure-works.com Road-150 Red 62 1 3578.27 286.2616
SO43697 1 2019-07-01T00:00:00Z Cole Watson cole1@adventure-works.com Road-150 Red 62 1 3578.27 286.2616
SO43699 1 2019-07-01T00:00:00Z Sydney Wright sydney61@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
... ... ... ... ... ... ... ... ...

クエリ出力をさらに視覚化ツールを使って分析したり、他のプログラムと統合してカスタム ダッシュボードや自動ワークフローを作成したりできます。

次の例では、take ステートメントを使用して、KQL データベース内の売上テーブルから 5 行を返します。これは、データの参照時にレコードの小さなサンプルを簡単かつ迅速に表示する方法です。

sales
| take 5

今回は、結果に次の 5 行が含まれます。

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Item Quantity UnitPrice TaxAmount
SO43701 1 2019-07-01T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43704 1 2019-07-01T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43705 1 2019-07-01T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43700 1 2019-07-01T00:00:00Z Ruben Prasad ruben10@adventure-works.com Road-650 Black 62 1 699.0982 55.9279
SO43703 1 2019-07-01T00:00:00Z Albert Alvarez albert7@adventure-works.com Road-150 Red 62 1 3578.27 286.2616

where 句を使用してフィルター処理する

KQL では、where は、指定した条件に基づいてテーブルの行をフィルター処理するために使用する句です。 where 句の後に、テーブル内の各行に対して true または false に評価されるブール式を続けます。 式が true に評価される行は結果に含まれ、式が false に評価される行は除外されます。

クエリの where 句で contains 演算子を使用して、Item 列に文字列 "Mountain-100" が含まれるかどうかに基づいて、sales テーブルの行をフィルター処理します。

sales
| where Item contains 'Mountain-100'

結果に、"Mountain-100" が含まれる品目の売上のみが含まれます。

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Item Quantity UnitPrice TaxAmount
SO43701 1 2019-07-01T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43704 1 2019-07-01T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43705 1 2019-07-01T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43699 1 2019-07-01T00:00:00Z Sydney Wright sydney61@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
... ... ... ... ... ... ... ... ...

KQL は、時系列データを操作する場合に特に適しています。 たとえば、売上データをフィルター処理して、2 つの datetime 値の間に発生した注文を表示します。 現在の時刻を返す now() など、多くの時系列関数を利用できます。 この例では、直近 1 日 (24 時間) 以内に発生したすべての注文が返されます。

sales
| where OrderDate between (now(-1d) .. now())

指定した期間内の注文のみを含むように結果がフィルター処理されます。

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Item Quantity UnitPrice TaxAmount
SO49171 1 2023-05-01T22:01:00Z Mariah Foster mariah21@adventure-works.com Road-250 Black 48 1 2181.5625 174.525
SO49172 1 2021-05-01T23:55:00Z Brian Howard brian23@adventure-works.com Road-250 Red 44 1 2443.35 195.468
SO49173 1 2021-05-02T01:10:00Z Linda Alvarez linda19@adventure-works.com Mountain-200 Silver 38 1 2071.4196 165.7136
... ... ... ... ... ... ... ... ...

クエリ結果を並べ替える

このクエリでは、sort 演算子を使用して、"Mountain-100" 品目の売上が、最新の売上が先頭に表示されるように並べ替えて取得します。

sales
| where Item contains 'Mountain-100'
| sort by OrderDate desc

結果は、次の例のようになります。

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Item Quantity UnitPrice TaxAmount
SO43699 1 2023-05-01T00:00:00Z Sydney Wright sydney61@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43705 1 2023-04-20T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43704 1 2023-04-12T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43701 1 2023-03-27T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
... ... ... ... ... ... ... ... ...

集計 (集約)

summarize 演算子を使用して、データを列でグループ化し、グループの集計を含む新しい列を作成できます。 たとえば、次のクエリを使用すると、販売された各品目の合計数量が返されます。

sales
| summarize ItemsSold= sum(Quantity) by Item

結果に、使用する集計関数 (この場合は sum()) に基づいた列が含まれます

アイテム ItemsSold
Water Bottle - 30 oz. 2,097
Patch Kit/8 Patches 1,621
Mountain Tire Tube 1,581
Road Tire Tube 1,212
... ...

Copilot を使用したクエリセット クエリの支援

Microsoft リアルタイム インテリジェンス ツールの新機能の 1 つは、Copilot for Real-Time Intelligence を使用できることです。 Copilot では、KQL クエリを作成したり、急いで学習しなくてはならない代わりに、自然言語のプロンプトを記述できます。

管理者が Copilot を有効にすると、クエリセットの上部のメニューバーにオプションが表示されます。 データについて質問すると、Copilot は質問の答えとなる KQL コードを生成します。 このコードなしアプローチを使用して、クエリセット内に複数のクエリを作成し、ユーザー消費に関する有益な情報を収集することができます。

クエリセットを使用したコードなし Copilot アプローチのスクリーンショット。

クエリセット内でクエリを実行したら、既存のダッシュボードに [ピン留め] するか、新しいダッシュボードを作成できます。 これを達成するには、ピン留めするクエリを選択し、[ダッシュボードにピン留めする] を選択します。 これにより、他のアクションを実行するためのウィンドウが表示されます。

ダッシュボー機能にピン留めしたコードなし Copilot のスクリーンショット。

また、クエリセット クエリを Power BI レポートに追加するには、目的のクエリを強調表示し、[PowerBI レポートを作成する] を選択します。

PowerBI レポートを作成するコードなし Copilot のスクリーンショット。

Note

[ダッシュボードにピン留めする] または [PowerB Iレポートを作成する] を使用して一度に 1 つのクエリしか選択できませんが、既存のダッシュボードにダッシュボード要素を追加できます。