Stream Analytics クエリ言語リファレンス

Azure Stream Analytics には、イベントのストリームに対して変換と計算を実行するための SQL クエリ言語が用意されています。

Stream Analytics クエリ言語 (T-SQL 構文のサブセット)

このドキュメントでは、Stream Analytics クエリ言語の構文、使用、およびベスト プラクティスについて説明します。 このドキュメントで使用する例はすべて、以下に説明する料金徴収ブースのシナリオを基にしています。

Stream Analytics クエリ言語は、ストリーミング計算用の標準的な T-SQL 構文のサブセットです。

料金徴収ブースのシナリオ

料金所は一般的なシステムで、世界各地の高速道路、橋、およびトンネルでみられます。 各料金所は、複数の料金徴収ブースを備えています。手動のところ (車両を停止させて係員に料金を支払う) もあれば、自動化されたところ (車両が料金徴収ブースを通過する際にブース上部に設置されたセンサーが車両のフロント ガラスに取り付けられた RFID カードを走査する) もあります。 車両が料金所を通過した事実は、イベント ストリームとして簡単に可視化でき、そのストリームを介して必要な処理を実行することができます。

到着時刻と利用時刻

Azure Stream Analytics のような経時システムでは、時間の経過を把握することが重要です。 システムを通過するすべてのイベントには、 System.Timestamp() を介してアクセスできるタイムスタンプが付属しています。 つまり、システム内のすべてのイベントは、ある時点を示しています。 このタイムスタンプは、ユーザーがクエリに指定できる利用時刻になることも、システムが到着時刻に基づいて割り当て可能な利用時刻となることもできます。 到着時刻は、入力ソースに基づいて異なる意味を持ちます。 Azure Event Hub からのイベントの場合、到着時刻はイベント ハブによって指定されたタイムスタンプです。BLOB ストレージの場合は、BLOB の最終変更時刻です。 タイムスタンプは、データのキャプチャまたは分析に関連した時点です。 ユーザーがアプリケーション時刻を使用する場合は、TIMESTAMP BY キーワード (keyword)を使用して行うことができます。 上記シナリオで、利用時刻は車両が料金徴収ブースに入った時刻となります。 データの受信ストリームで "タイムスタンプ" を識別することが重要です。キャプチャされた時刻によってイベントの発生も確認されるようにする必要があります。 たとえば、現金カウンターを監視していて、請求された顧客の数をカウントする必要がある場合、イベント タイムスタンプは"請求が生成された" 時間ではなく "支払い成功" であることが理想的です。

TIMESTAMP BY

Azure Stream Analytics では、すべてのイベントに適切に定義されたタイムスタンプがあります。 ユーザーがアプリケーション時間を使用する場合は、TIMESTAMP BY キーワード (keyword)を使用してペイロード内の列を指定できます。この列を使用して、すべての受信イベントのタイムスタンプを設定して、Windowing、Joins などの一時的な計算を実行する必要があります。ベスト プラクティスとして、到着時間の経過と同時に TIMESTAMP BY を使用することをお勧めします。 TIMESTAMP BY は datetime 型の任意の列で使用でき、すべての ISO 8601 形式がサポートされています。 System.Timestamp() は Select でのみ使用できます。

次に、イベントの利用時刻として EntryTime 列を使用する TIMESTAMP BY の例です。

  
SELECT TollId, EntryTime AS VehicleEntryTime, LicensePlate, State, Make, Model, VehicleType, VehicleWeight, Toll, Tag   
FROM TollTagEntry TIMESTAMP BY EntryTime  
  

フィールド名の大文字と小文字の区別

互換性レベル 1.0 を使用して作成されたジョブのフィールド名は、Azure Stream Analytics エンジンによって処理されるときに小文字に変更されます (大文字と小文字は区別されません)。 JSON など、大文字と小文字を区別するスキーマをサポートする入力形式の場合は、大文字と小文字を区別しない方法でフィールド名を比較するときに、重複するフィールドを持つイベントを作成できます。 そのようなイベントは無効なイベントと見なされ、処理時に削除されます。

互換性レベル 1.1 以上を使用して Stream Analytics ジョブを作成すると、フィールド名に対して大文字と小文字の区別が保持されます。 詳細については、 互換性レベルの構成 に関するトピックを参照してください。

このセクションの内容

Stream Analytics クエリ言語の使用に関するガイダンスについては、次のトピックを参照してください。

参照