【徹底解説】Azure Data Explorerとは?何ができるの?どういう時に使うの?

こんばんは。今晩は、Azure Data Explorerについて勉強しました。

いったい何者なのか、何ができるのか、どんな時に使うとよいのか、調べて分かったことを参考文献とともに箇条書きメモ形式でまとめておきたいと思います。

これを最後まで見ていただくと使用感含めてなんとなくわかった気になれる、、ことを目指して笑 少しでもイメージアップに役立ちましたら幸いです。

それではまいります。

Azure Data Explorerとは?

https://docs.microsoft.com/ja-jp/azure/data-explorer/data-explorer-overview

  • 大量のデータをほぼリアルタイムで簡単に分析できるようにする、フル マネージドかつハイ パフォーマンスなビッグ データ分析プラットフォーム
  • 構造化・半構造化・非構造化データが時系列で分析され、Machine Learning が使用されるので、重要な分析情報の抽出、パターンと傾向の特定、予測モデルの作成が簡単になる
  • スケーラブルかつ安全で堅牢、そしてエンタープライズに対応しており、ログ分析、時系列分析、IoT、汎用の調査分析に役立つ
  • データの探索にはKQL (Kustoクエリ言語)を用いる

Azure Data Explorerの使いどころ

まず、実際に触ってみて気付いたこととして、Azure SQL DatabaseなどのRDBMSからのデータ取り込みオプションが見当たらないこと。(できるのかもしれませんが・・)ネットを漁ってみてもそういったユースケースの記事が見つからない・・

データの取り込み元としては、下のアーキテクチャ図のようにBlobストレージやIoT Hub、Event Grid、Event Hubなど。あれ、SQL Databaseなどと共存するようなサービスではないのかな・・?

SQL Databaseなどと連携したMicrosoft公式のアーキテクチャパターンがないか探してみました。

こんなのがあった。

Azure Data Explorer による対話型分析

https://docs.microsoft.com/ja-jp/azure/architecture/solution-ideas/articles/interactive-azure-data-explorer

このアーキテクチャでは、Azure Data ExplorerプラグインのFederated Queryなるものを使ってSQL DBやCosmosDBのデータをクエリできるように読み取れる。Federated Queryについてなぜか公式ドキュメントが見つからず正体が不明ですが、何かしらの方法でデータに接続することはできそう。

ただ、多かったのは、以下のようにRDBMSが得意とするトランザクショナルデータではなく、IoT機器が出力する時系列データなどのデータストアとして利用するパターンが多いように見えましたので、そうしたRDBMSとは性質の異なる時系列のログやその他分析用データの蓄積場所として向いているのかなと理解しました。

確かにそうしたデータは、可視化・分析が主な目的になってくるので、SQL Databaseにためるよりも、Data Explorerにためておいた方が素早く活用できてよい気がしますね。

Azure Data Explorer による監視

https://docs.microsoft.com/ja-jp/azure/architecture/solution-ideas/articles/monitor-azure-data-explorer

Azure Data Explorer を使用した IoT 分析

https://docs.microsoft.com/ja-jp/azure/architecture/solution-ideas/articles/iot-azure-data-explorer

Azure Data Explorerのアーキテクチャ

公式ドキュメントに以下の絵があります。

https://docs.microsoft.com/ja-jp/azure/data-explorer/data-explorer-overview
  • 最上位の概念はクラスター
  • Azure Data Explorerでは、外部のデータソースからデータを取り込んでData Explorer内のデータベースに保持している。クラスターには10,000個のデータベースを保持でき、1つのデータベースにはさらに10,000個までテーブル保持できる。(大量データを保持可能)
  • その他EngineとData Managementというコンポーネントがある
  • Data Management経由でデータを取り込んで、エンジンでデータを取得する
  • Data Managementの詳細の公式ドキュメントはこちら
  • Engineの方の公式ドキュメントはこれっぽい

EngineとData Managementコンポーネントの役割をもう少し細かく見てみます。

Data Managementのアーキテクチャ

https://docs.microsoft.com/ja-jp/azure/data-explorer/ingest-data-overview

https://docs.microsoft.com/ja-jp/azure/data-explorer/ingest-data-overview
  • 外部データソースからデータをプルして読み込む
  • データはバッチ処理かストリーミングで取り込まれる
  • Data Managerはインジェストされたデータをエンジンにコミットする
  • インジェスト時には、初期データに対するデータ形式の変換、スキーマ照合、インデックス生成、エンコード、圧縮などが自動的に行われている
  • インジェストの方法には、マネージドパイプライン・コネクタとプラグイン・SDKを利用したプログラムによるインジェストの3パターンがある
  • マネージドパイプラインとしては、Event Hub、Event Grid、IoT Hub、Azure Data Factoryがサポートされていて、これらのサービスからData Explorerにデータを転送することができる
  • コネクタとプラグインのオプションでは、LogStash、Kafka、Power Automate、Apache Sparkがサポートされており、接続できる
  • インジェストオプションの比較はこちら

Engineのアーキテクチャ

https://docs.microsoft.com/ja-jp/azure/data-explorer/engine-v3

https://docs.microsoft.com/ja-jp/azure/data-explorer/engine-v3#how-enginev3-works
  • Engineはクエリ用エンジン。ストレージとインデックスも含む。テレメトリ・ログ・時系列データの取り込みとクエリに特化してハイパフォーマンスが得られるように設計されている
  • 行ストア(ストリーミングインジェスト用)と列ストアのストレージエンジンが含まれる
  • ストリーミングインジェストの場合は、最初に行ストアに取り込まれ、その後列ストアのエクステントにインジェストされる
  • インジェスト先のテーブルではシャードという単位でデータが管理されているが、このシャードはクラスターのノード間に均等に分散されていて、ローカルSSDとメモリの両方にキャッシュされている
  • クエリプランナーとクエリエンジンにより、この構成の利点を生かす高度に分散された並列クエリが作成されるため、ハイパフォーマンスなクエリが実現できている
  • なお、インジェスト先のテーブルは事前にData Explorer上に作成しておく必要がある

Azure Data Explorerの高可用性オプションは?

こちらにまとまっています。

https://docs.microsoft.com/ja-jp/azure/data-explorer/business-continuity-overview

なお、規定の可用性は99.9%です。99.9%というと月間で43.8分の停止に相当するので、ビジネスクリティカルな用途であれば高可用性化の対策が必要そうです。

https://azure.microsoft.com/ja-jp/support/legal/sla/data-explorer/v1_0/

Azure Data Explorerの価格は?

https://azure.microsoft.com/ja-jp/pricing/details/data-explorer/

Data Explorerの価格は、以下から構成されるようです。

  • インスタンスの料金(エンジンインスタンスとデータ管理インスタンス)
  • Azure Data Explorer割増料金
  • ストレージの料金
  • ネットワークの料金(Azure共通)

謎の割増料金がインスタンスのコア数に応じて上乗せされていますが、インスタンスの上でData Explorerの機能を実現する上での追加料金と考えれば納得できそうです。(別のもっとポジティブに聞こえる名前にしたらよいのに・・笑)

以下の料金シミュレーションでも見えますが、この中で最もコストがかさむのはインスタンスの料金なので、大半はインスタンスの料金と考えておくとよさそうです。

インスタンスの料金はさらにエンジンとデータ管理インスタンスで分かれていますが、下の見積もりを見る感じエンジンの方が高額の模様。

https://azure.microsoft.com/ja-jp/pricing/calculator/

運用環境想定だと、月々85000円程度・・・個人で利用するにはお高いので、法人利用想定ですね、、、

なお、SLAのない開発/テスト環境にすると、月々25000円弱ほどのようなので、とりあえず検証してみるには、ここからスタートするとよいかもしれません。

使用感

リソースの作成

リソース作成では、Azure Data Explorerクラスターを作成することになります。

基本情報。可用性ゾーンへのデプロイも最初に設定することができます。

スケーリングの設定もできます。

構成設定。

セキュリティ設定。

ネットワーク設定。閉域化の設定ができます。この辺りは最近の他のAzureサービスと一緒ですね。

リソースの作成は数分~10分程度で完了しました。

クラスター内にデータベースを作成

最初に行うことはデータベースの作成です。これがないと、外部データソースからデータをインジェストできません。

データベース作成時のオプションは最小限という感じです。名前とデータ保持期間・キャッシュ期間を指定するだけ。

データのインジェスト(From Azure SQL Database)

データベースができたらデータの取り込みです。

今回は、Azure Blob Storage上のCSVデータを取り込んでみたいと思います。

「概要」から「取り込み」に進みます。

「Ingest data from blob」を選択します。

取り込み先のData Explorer側のテーブルを作成します。この段階でテーブル定義は不要です。

続いて、取り込み元のBlobファイルのURL(SAS URL)を設定します。

すると・・おお!データ型が自動的に解析されて、プレビューに表示されました・・!これは便利だと思いました。

このままStart Ingestionに進むと、データの取り込みが即座に開始します。

操作も直感的で、とても簡単だったと思います。なお、今回はワンタイムの取り込みを試しましたが、もちろんこれをバッチで継続的に取り込む、といったこともできます。

クエリ実行

最後に、取り込んだデータをクエリしてみたいと思います。

Data Explorerの「クエリ」タブから、Kustoクエリを投げると・・・即座にデータが得られました・・!(今回は100行だけだからですが・・笑)

以上、入り口だけではありますが、Azure Data Explorerの概要についてのまとめでした。

少しでもイメージアップの参考になりましたら幸いです。また、役立った!という方は下のいいねボタンを押していただけると励みになります!

それではまた・・・!

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。