Azureのストリーミングデータ 分析ソリューションであるStream Analyticsを用いると、リアルタイムなデータ分析を行うためのデータパイプラインの構築が可能となります。
本記事ではStream Analyticsの入門編と題し、Stream Analyticsの基本的な知識についてご紹介します。
Azure Stream Analyticsとは
Azure Stream Analytics の概要は下記の通りです。
- ストリーミング データを分析および処理するフルマネージドなPaaSサービス
- 様々なデータソースからデータを取得することが可能
- SQLクエリを用いてのデータの加工/分析
- コードなしでのGUIベースのドラッグ&ドロップ機能を利用しての開発
- 手動/自動によるスケーラブルなリソースの拡張
- 配信保証によるデータの損失が発生しない高い信頼性
Stream Analytics を用いることで、様々な場所で生成され収集されてくるストリーミングデータを、リアルタイムに分析することが可能になります。
Stream Analytics の基本用語
Stream Analyticsで分析および処理を行うためには、Stream Analyticsジョブと呼ばれるものを構築することが必要になります。
Stream Analytics ジョブ
Stream Analyticsジョブは以下の3つの要素で構成されます。
- 入力
- 出力
- クエリ
それぞれの要素についての説明は以下の通りです。
入力
入力は、データソースへの接続情報を定義したものを指します。
1 つまたは複数のデータ入力からデータを受け取ることが可能であり、入力として使用可能なリソースは以下の4種類存在しています。
- Event Hubs
- IoT Hub
- Blob ストレージ
- Azure Data Lake Storage
出力
出力は、変換されたデータを送信可能な出力先を定義したものを指します
ジョブごとに1つの出力を指定することが可能であり、出力として使用可能なリソースは数多く存在しています。
- Azure Event Hubs
- Azure Functions
- Azure Synapse Analytics
- Azure Blob Storage
- Azure Data Lake Storage Gen 2
- Azure Cosmos DB
- Azure Database for PostgreSQL
- Azure SQL Database
- Power BI
クエリ
SQL クエリを用いることにより、ストリームデータの分析および処理が可能になります。
Stream Analyticsでは、受け取ったデータに対して変換や計算を実行するためのStream Analytics クエリ言語が存在します。
Stream Analytics クエリ言語で利用可能なものは、下記のようなものが代表例としてあげられます。
- 組み込み関数
- 集計関数(SUM、AVG、COUNT)、分析関数、ウィンドウ関数を利用可能
- クエリ言語要素
- CASE、GROUP BY、HAVING、JOIN、WHEREのような一般的なSQLクエリで利用するものを同様に利用可能
- Time Management
- Stream Analyticsでは受け取ったすべてのデータにタイムスタンプが定義され、タイムスタンプを用いて集計するデータの時間枠を設定することが可能
- Stream Analytics で利用可能な時間は以下の2種類
- 到着時間:入力で指定したリソースがデータを受け取ったタイミングの時間
- アプリケーション時間:Stream Analyticsで扱うデータが定義されたタイミングの時間
- Azure Stream Analytics でのすべての時間処理操作は UTC
SU(ストリーミングユニット)
Stream Analytics ジョブを実行するために割り当てられているコンピューティング リソース(CPU、メモリ)を、ストリーミングユニットと言います。
ストリーミングユニットが実際に動作する環境をストリーミングノードと言い、Stream Analyticsで発生する料金は1ストリーミングノードあたりで発生します。
Stream Analyticsジョブの利用にあたって下記の2種類の料金プランが存在します。
- SU V1 (非推奨)
- 以前まで利用されていたストリーミングユニットの料金プラン
- 6SUを1セットで1ストリーミングノードとしてリソースが利用される
- 設定可能なSU数:1SU、3SU、6SU、12SU、18SU・・・
- 6SU以降は、6SUずつ増加する
- SU V2 (推奨)
- 最新のストリーミングユニットの料金プラン
- 1SUを1ストリーミングノードとしてリソースが利用される
- 設定可能なSU数:1/3SU、2/3SU、1SU、2SU、3SU・・・
1ストリーミングユニットあたりの料金はそれぞれ下記の通りです。
価格プラン |
ストリーミングノードあたりの価格 |
SU V1 |
0.66$/h |
SU V2 |
0.43$/h |
SU V1と比較してSU V2の料金プランのほうがよりコスト効率が高いため利用が推奨されています。
スケーリング
ストリーミングユニットは、自動および手動でのスケールアウト/スケールインをすることが可能です。
- 手動でのスケーリング
- Stream Analyticsジョブで使用するストリーミング ユニットを一定の値に維持すること、もしくは増やしたり減らしたり調整することが可能
- カスタム自動スケーリング
- Stream Analyticsジョブで使用するストリーミング ユニットの最大数と最小数を指定し、ルール定義に基づいて動的に調整することが可能
- 例:
- 5 分間の平均 SU% 使用率が 80% を超えている場合、ストリーミング ユニットを増加
- 10 分間の平均 SU% 使用率が 20% を下回っている場合、ストリーミング ユニットを削減
配信保証
Stream Analyticsでは、処理されるデータの損失を発生させないための3つの概念が存在しています。
- 正確に1 回だけ処理(Exactly once processing)
- Stream Analyticsジョブで設定を行った「入力」から得られたデータ常に同じ結果を1回だけ得ることが可能
- 少なくとも 1 回の配信(at least once delivery)
- Stream Analytics ジョブが実行されている場合、出力するデータに重複するものが見られる場合はあるが少なくとも1回はすべての出力に正確に配信させることが可能
- 正確に1 回の配信(Exactly once delivery)
- 正確に 1 回の処理を行ったのちに、すべての出力に正確に 1 回配信されるため重複なく出力することが可能
- ただし、Azure CosmosDB、Azure SQLなど一部のトランザクション機能が存在するものに限る
ユースケース
Stream Analytics を他のAzureサービスと連携させることで、下記のようなデータパイプラインの構築が可能になります。
IoTデバイスから収集されるログをデータストアに格納(TableauなどのBIツールで参照)
WebアプリケーションログをPowerBIを用いて可視化
異常検出時のアラート通知
おわりに
今回の記事では、Stream Analytics 入門編ということで、Stream Analytics を利用するにあたって必要となる基本的な知識をご紹介させていただきました。
次回の記事では、Stream Analytics 構築編と題しまして、Stream analyticsジョブの具体的な構築の流れや、実際のデータ連携時の動作についての内容を紹介させていただきます。
そちらの記事も合わせてご一読いただけますと幸いです。