KQL を使用してクエリを記述する
KQL データベース内のテーブルのデータのクエリを実行するには、Kusto 照会言語 (KQL) を使用します。これは、Azure Data Explorer、Azure Monitor Log Analytics、Azure Sentinel、Azure Fabric でクエリを記述するために使用されます。 KQL は、データを処理して結果を返す読み取り専用の要求です。 KQL クエリは 1 つ以上のクエリ ステートメントで構成します。
クエリ ステートメントは、テーブル名の後に、データの take
、filter
、transform
、aggregate
、または join
を行う 1 つ以上の演算子で構成します。 次に例を示します。
sales
| take 10
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 コードを生成します。 このコードなしアプローチを使用して、クエリセット内に複数のクエリを作成し、ユーザー消費に関する有益な情報を収集することができます。
クエリセット内でクエリを実行したら、既存のダッシュボードに [ピン留め] するか、新しいダッシュボードを作成できます。 これを達成するには、ピン留めするクエリを選択し、[ダッシュボードにピン留めする] を選択します。 これにより、他のアクションを実行するためのウィンドウが表示されます。
また、クエリセット クエリを Power BI レポートに追加するには、目的のクエリを強調表示し、[PowerBI レポートを作成する] を選択します。
Note
[ダッシュボードにピン留めする] または [PowerB Iレポートを作成する] を使用して一度に 1 つのクエリしか選択できませんが、既存のダッシュボードにダッシュボード要素を追加できます。