1

バックグラウンド

ここここのチュートリアルに基づいて、Azure Event Hub と Azure Stream Analytics (ASA) を使用して IoT プロジェクトをセットアップしました。JSON 形式のメッセージは、webhook を使用して Wi-Fi 対応デバイスからイベント ハブに送信されます。メッセージは ASA クエリを介してフィードされ、送信元の入力ストリームに基づいて 3 つの Azure SQL データベースのいずれかに格納されます。

デバイス (Particle Photon) は、異なるペイロードを持つ 3 つの異なるメッセージを送信します。これらのメッセージには、長期保存/分析用に定義された 3 つの SQL テーブルがあります。次のステップには、リアルタイム アラートと、Power BI による視覚化が含まれます。

以下は、アイデアを視覚的に表したものです。 IoT: 粒子フォトン + Azure

ASA クエリ

SELECT
    ParticleId,
    TimePublished,
    PH,
    -- and other fields
INTO TpEnvStateOutputToSQL
FROM TpEnvStateInput


SELECT
    ParticleId,
    TimePublished,
    EventCode,
    -- and other fields
INTO TpEventsOutputToSQL
FROM TpEventsInput


SELECT
    ParticleId,
    TimePublished,
    FreshWater,
    -- and other fields
INTO TpConsLevelOutputToSQL
FROM TpConsLevelInput

問題:メッセージを受信するたびに、クエリで指定された出力だけでなく、データベース内の3 つのテーブルすべてにデータがプッシュされます。データが属するテーブルには期待どおりに新しい行が取り込まれますが、他の 2 つのテーブルにはデータが存在しない列の NULL が取り込まれます。

ASAのドキュメントから、INTO キーワードが出力を指定されたシンクに送信することを理解していました。しかし、3 つの入力すべてからの出力がすべてのシンク (3 つの SQL テーブルすべて) にプッシュされるため、そうではないようです。

Particle Photon 用に私が書いたテスト スクリプトは、ハードコーディングされたフィールドを持つ各タイプのメッセージを、EnvState、Event、ConsLevels の順に 15 秒間隔で繰り返し送信します。

すべてのテーブルに送信される出力の例を次に示します。各テーブルの 1 つの列が示されています。 ここに画像の説明を入力

このクエリを使用して生成されたもの (Visual Studio):

SELECT 
    t1.TimePublished as t1_t2_t3_TimePublished, 
    t1.ParticleId as t1_t2_t3_ParticleID, 
    t1.PH as t1_PH, 
    t2.EventCode as t2_EventCode, 
    t3.FreshWater as t3_FreshWater
FROM dbo.EnvironmentState as t1, dbo.Event as t2, dbo.ConsumableLevel as t3
WHERE t1.TimePublished = t2.TimePublished AND t2.TimePublished = t3.TimePublished

キー 'PH' が存在する (それぞれ TpEventInput および TpConsLevelInput に属するキー 'EventCode' または 'FreshWater' ではない) タイプ TpEnvStateInput の入力イベントの場合、EnvironmentState テーブルのみへのエントリが必要です。

質問: ASA クエリのどこかにバグがありますか、それとも ASA の使用方法/セットアップ方法に関する私の誤解ですか?

3 つの別個の Stream Analytics コンテナーを定義する必要がないことを望んでいました。このチュートリアルを実行し、4 つの ASA コンテナーを 1 日実行したままにした後、5 ドル近くの Azure クレジットを使い果たしました。予測される月額 150 ドルのコストでは、Azure を使い続けることを正当化する方法はありません。

4

2 に答える 2

1

ASA は、複合イベント処理を目的としているはずです。クエリで ASA を使用して、基本的にイベント ハブからテーブルにデータを渡します。着信イベントを処理する単純な「ワーカー Web アプリ」を実際にホストすると、はるかに安くなります。

このブログ投稿では、ベスト プラクティスについて説明しています: http://blogs.msdn.com/b/servicebus/archive/2015/01/16/event-processor-host-best-practices-part-1.aspx

ASA は、入力データに対してリアルタイムで変換、フィルター、簡単な分析を行う場合に最適です。さらに、関数として公開されている Azure Machine Learning モデルがある場合にもうまく機能します (現在プレビュー中)。

于 2015-12-28T04:46:17.313 に答える