🪄

Kustoで広がるデータ分析の世界

2023/12/14に公開

はじめに

最近、Azure 上でデータを扱うことがあり、これをきっかけに Kusto クエリ言語に出会いました。初めてのクエリ言語だったこともあり、データの扱いに戸惑いながらもその便利さと可能性を知りました。
Kusto でのデータ分析は、Python のような複雑な環境構築や管理が不要で、Azure 上でデータを直接的に操作ができるにもかかわらず、割とリッチな可視化まで行えます。

この記事では、Python でのデータ分析しか知らなかった私が、 Kusto を用いてデータを可視化していく際に、出会った Kusto の便利な使い方3つをご紹介します。
(基本的な Kusto の使い方は Microsoft 公式の Learn や他の記事を参照ください🙏

Kusto とは

Kusto は Microsoft が提供するクラウドサービスである Azure の独自言語で、ログなどを参照する際に用いるクエリ言語です。

Microsoft の Learn では、

Kusto クエリとは

Kusto クエリは、データを処理して結果を返すための、読み取り専用の要求です。 要求は、読みやすく、作りやすく、自動化しやすいデータフロー モデルを利用してプレーンテキストで提示されます。Kusto クエリは 1 つ以上のクエリ ステートメントで構成されます。

https://learn.microsoft.com/ja-jp/azure/data-explorer/kusto/query/

とありますが、用語が多くて正直わかりません。SQL などの参照言語をベースに、読みやすく、書きやすく、自動化しやすくした独自言語だと思っています。

1. 変数の定義

最初はベタ書きしていても、コードが長くなるにつれ、変数を定義して可読性を上げたくなります。
Kusto でも変数を定義することができます。

変数を使うことで繰り返しの値を簡単に管理し、クエリの読みやすさと書きやすさが劇的に向上し、効率よく作業ができるようになりました。

let start_date = ago(30d)

ErrorLogs
| where Timestamp > start_date

2. 独自関数の保存

Azure Log Analytics などでは独自関数を保存し、複数のクエリにわたる同じ処理を簡単に適用、編集することができます。関数を更新するだけで全ての関連クエリに変更を反映できることはとても便利で、劇的な作業時間の節約と効率の向上につながります。

例として、特定のパターンに一致するレコードに case 文でラベルを付与する関数を考えてみます。

関数の定義

この関数では、複数のパターンとそれに対応するラベルを定義し、ラベルとなる文字列を返します。

case(
        request == "パターン1", "ラベル1",
        request == "パターン2", "ラベル2",
        "その他"
);

この関数は、入力として request を受け取り、特定のパターンに一致するかどうかに case 文に基づいて、新しい Label 列に対応するラベルを返します。

関数を保存する際に"関数名"と、"パラメーター" という項目があるので、タイプ(引数の型、ここでは string )、名前(引数名、ここでは request )、必要に応じて規定値を定義し、保存します。

関数の使用

任意のクエリで保存した関数名を使い、この関数を呼び出すことができます。

MyTable
| expend Label = LabelRecords(request)

この例では、MyTable に対して 派生列 Label を追加し LabelRecords 関数に MyTable 内の 各レコードの request を入力し、case 文で指定した適切なラベルを付与します。

3. リソースグループ間でも統合できる Workspace 関数

Kusto では workspace 関数を使うことで異なるデータソースを横断する場合も、一つのクエリで分析、可視化することができます。これを使うことで、データ分析の可能性が無限に広がります。

workspace(resource_id).OtherTableName
| where Timestamp > ago(30d)
| summarize Count = count() by Category
| sort by Count desc

複数のリソースグループに渡るデータをまとめて集計したい場合はもちろんのこと、bicep(※) で書く際にもリソースID をを指定してデータを参照できることから、loop 文を用いて効率的に書くことができるように便利になりました。

※ bicep について

https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/overview?tabs=bicep

まとめ

Python と Pandas しか知らなかった私は、Kusto というクエリ言語への抵抗感を持っていました。実際に使ってみると、その強力な機能と Azure 上での直接操作、データの可視化の可能性を知り、データ分析の重要なアプローチの一つとして考えるようになりました。

これからも新しい技術に対しオープンな姿勢で臨み、データ分析の領域を広げていきたいと思います。本記事が、みなさまの Kusto を用いたデータ分析に少しでも役に立てば幸いです。
最後まで読んでいただきありがとうございました。

Discussion