2017-12-28 10 views
0

iothubデータをSQLデータベースにプッシュするストリーム分析クエリを作成しようとしています。ストリーム解析クエリでデバイスデータからEnqueuedTime device_idを取得する

MY IOTHUBデータは、以下のとおりです。

{ 
    "Device_Id":"P371602011", 
    "kWL1":11.683551775144204, 
    "EventProcessedUtcTime":"2017-12-28T07:21:14.3829760Z", 
    "PartitionId":0, 
    "EventEnqueuedUtcTime":"2017-12-28T07:21:04.6660000Z", 
    "IoTHub": 
    { 
     "MessageId":null, 
     "CorrelationId":null, 
     "ConnectionDeviceId":"iotclient", 
     "ConnectionDeviceGenerationId":"636500361000571958", 
     "EnqueuedTime":"2017-12-28T07:21:04.0540000Z", 
     "StreamId":null 
    } 
} 

ここで、Device_Id、kWL1、およびEnqueuedTimeをSQLデータベースに書き込もうとしています。 My Streamの分析クエリは次のようになります。私はストリーム分析ジョブを実行すると

SELECT 
Device_Id AS PowerScout, 
IoTHub.EnqueuedTime AS [ReadingTime], 
kWL1 AS [kW L1] 
INTO 
[DataBase] 
FROM 
[IoTHub] 

、私はDEVICE_IDとkWL1値を参照してくださいすることができますが、EnqueuedTimeはNULLとして表示されます。 IOTHubデータからEnqueuedTimeを取得する方法。

{ 
"DeviceData": [ 
    { 
     "Device_Id": "5", 
     "AMPSL1": 1.2515641182178531E-38 
    } 
], 
"EventEnqueuedUtcTime": "2018-01-08T05:03:08.0840000Z", 
"IoTHub": { 
    "MessageId": null, 
    "CorrelationId": null, 
    "ConnectionDeviceId": "VHW1", 
    "ConnectionDeviceGenerationId": "636509839893748612", 
    "EnqueuedTime": "2018-01-08T05:03:06.7460000Z", 
    "StreamId": null 
} 
} 

上記の形式でDevice_IdとAMPSL1を取得するにはどうすればよいですか。ご提供INFOMATIONからアドバンス

答えて

0

おかげで、私は1つがあなたのストリームAnalyticsで入力、しかし一方でIoTHubがオブジェクトではあり、問題は名前IoTHubがdumplicateであるということだと思いますあなたのデータ。としてIoTHubMessageContentという名前を変更することができます(たとえば、あなたは他の名前に変更することができます)。

{ 
    "Device_Id":"P371602011", 
    "kWL1":11.683551775144204, 
    "EventProcessedUtcTime":"2017-12-28T07:21:14.3829760Z", 
    "PartitionId":0, 
    "EventEnqueuedUtcTime":"2017-12-28T07:21:04.6660000Z", 
    "IoTHubMessageContent": 
    { 
     "MessageId":null, 
     "CorrelationId":null, 
     "ConnectionDeviceId":"iotclient", 
     "ConnectionDeviceGenerationId":"636500361000571958", 
     "EnqueuedTime":"2017-12-28T07:21:04.0540000Z", 
     "StreamId":null 
    } 
} 

次に、次のようにクエリを変更します。

SELECT 
Device_Id AS PowerScout, 
IoTHubMessageContent.EnqueuedTime AS [ReadingTime], 
kWL1 AS [kW L1] 
INTO 
[DataBase] 
FROM 
[IoTHub] 

その後、クエリコマンドを実行すると結果が表示されます。

enter image description here

+0

{ "DeviceData":[{ "DEVICE_ID": "5"、 "AMPSL1":1.2515641182178531E-38 }]、 "EventEnqueuedUtcTime":「2018-01-08T05: 03:08.0840000Z " "IoTHub":{ "のMessageId":ヌル、 "CorrelationIdを":ヌル、 "ConnectionDeviceId": "VHW1"、 "ConnectionDeviceGenerationId": "636509839893748612"、 "EnqueuedTime":" 2018-01-08T05:03:06.7460000Z "、 " StreamId ":null } } 上記のフォーマットでDevice_Id&AMPSL1を取得するにはどうすればよいですか? –

+0

@krishnabhについては、このブログ([ストリームアナリティクスクエリのJson配列の処理]を参照してください(https://blogs.msdn.microsoft.com/streamanalytics/2016/02/23/handling-json-array-in-stream- analytics-query /))。私はそれがあなたに役立つと思います。あなたは、このクエリコマンドを試すことができます。 AS DeviceDataCollection WITH ( 入力 0)DeviceData として GetArrayElement(DeviceDataを、SELECT) SELECT はDeviceData.Device_Id、DeviceDataCollection –

+0

こんにちはマイケル、 FROM DeviceData.AMPSL1 私はDevice_Id&AMPSL1を取得することができますが、IoTHub.EnqueuedTime AS [TimeStamp]のような他の値が同じクエリで不足しています。 DeviceDataCollection AS( SELECT GetArrayElement(DeviceData、0)DeviceData、 Iothub.EnqueuedTime として入力 FROM) SELECT DeviceData.Device_Id WITH、:私はDEVICE_ID&AMPSL1とEnqueuedTime –

0

もう一つの方法は、IoTHub入力にIoTHubと呼ばれるネストされたJSONオブジェクトを読むことができるようにするために従うよう、あなたのクエリを変更することです:

SELECT 
Device_Id AS PowerScout, 
[IoTHub].[IoTHub].EnqueuedTime AS [ReadingTime], 
kWL1 AS [kW L1] 
INTO 
[DataBase] 
FROM 
[IoTHub] 
0

は、最後に私がそれを作ることができています@Michael Xuの助け - MSFT。最終的な質問は以下の通りです。

WITH DeviceDataCollection AS 
( 
    SELECT GetArrayElement(DeviceData,0)as DeviceData, 
    IoTHub.EnqueuedTime as time FROM IoTHubIn  
) 
SELECT 
    DeviceData.Device_Id AS PowerScout, 
    time AS [TimeStamp] 
INTO 
[DataBase] 
FROM 
[DeviceDataCollection] 
関連する問題