2017-12-28 24 views
0

SQL 데이터베이스에 iothub 데이터를 푸시하기 위해 스트림 분석 쿼리를 작성하려고합니다.스트림 분석 쿼리가 장치 데이터에서 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 
    } 
} 

지금 내가 SQL 데이터베이스에 DEVICE_ID, kWL1 및 EnqueuedTime를 작성하려합니다. 내 스트림 분석 검색어는 다음과 같습니다. 내가 스트림 분석 작업을 실행하면

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을 어떻게 얻을 수 있습니까? 귀하의 제공 정보]에서 사전

답변

0

에서

덕분에, 나는 하나 스트림 분석에 입력하지만, 한편 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 "널 (null), "CorrelationID를 "널 (null), "ConnectionDeviceId ":"VHW1 " "ConnectionDeviceGenerationId ":"636509839893748612 " "EnqueuedTime "" 2018-01-08T05 : 03 : 06.7460000Z ", "StreamId ": null } } 위의 포맷에서 Device_Id & AMPSL1을 어떻게 얻을 수 있습니까? –

+0

@ krishnabh,이 블로그 ([Stream Analytics 쿼리의 Json 배열 처리] (https://blogs.msdn.microsoft.com/streamanalytics/2016/02/23/handling-json-array-in-stream- analytics-query /)). 나는 그것이 당신에게 도움이 될 것이라고 생각합니다. AS DeviceDataCollection 함께 –

+0

안녕 마이클, DeviceDataCollection로부터 이 DeviceData.Device_Id을 선택 DeviceData.AMPSL1 ( 입력 FROM DeviceData 0) GetArrayElement (DeviceData를 선택) :이 쿼리 명령을 시도 할 수 있습니다 빠른 답장을 보내 주셔서 감사합니다, 내가 이것을 사용하여 Device_Id & AMPSL1을 얻을 수 있지만 이미 동일한 값으로 IoTHub.EnqueuedTime [TimeStamp] 같은 다른 값이 누락되었습니다. 내가 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]