Как запросить JSON для развертывания JSON, связанного с несколькими значениями массива в потоковой аналитике - PullRequest
0 голосов
/ 03 мая 2018

Я хочу запросить ниже входные данные JSON, полученные от IotHub в потоковой аналитике

{
            "DeviceId": "12355",
            "Message": {
                        "TimeStamp": [{"Time": "1"}, {"Time": "2"}],
                        "Streak": "4",
                        "Checkin": [{"Time": "3"}, {"Time": "4"}],
                        "Status": ""
            }
}

Я использовал приведенный ниже запрос, который дает мне четыре выхода после применения кросса. Я просто хочу два вывода

Я хочу, чтобы мой вывод был в формате ниже.

DeviceID    Streak  TimeStamp   Checkin  Status
  "12355"   "4"     "1"         "3"      ""
  "12355"   "4"     "2"         "4"      ""

Это запрос, который я написал с помощью Cross Apply

SELECT
 [Stat].[DeviceId] AS [DeviceId],

 [Stat].[Message].[Streak] AS [Streak],
 [Stat].[Message].[Status] AS [Status],
 [Stat].[Message].[Error] AS [Error],
 [Stat].[UseTime].[Time] AS [Checkin],
 [Stat].[Open].[Time] AS [OpenTime]
 INTO
 Messages
FROM
(
 SELECT
 [EventAlias].*,
 [Checkin].[ArrayValue] AS [UseTime],
[OutputTime].[ArrayValue] AS [Open]
 FROM [SmartCapData] AS [EventAlias]
 CROSS APPLY GetArrayElements(EventAlias.Message.Checkin) AS [Checkin]
 CROSS APPLY GetArrayElements(EventAlias.Message.Timestamp) AS [OutputTime]
) AS Stat

В приведенном выше примере применяется перекрестный переход, я хочу использовать его параллельно, Заранее спасибо:)

1 Ответ

0 голосов
/ 09 мая 2018

Этот запрос должен помочь:

SELECT
    inputevents.DeviceId,
    inputevents.Message.Streak, 
    inputevents.Message.Status, 
    a.ArrayValue.Time AS Timestamp, 
    GetRecordPropertyValue(GetArrayElement(inputevents.Message.Checkin, a.ArrayIndex), 'Time') AS Checkin
FROM inputevents
CROSS APPLY GetArrayElements(inputevents.Message.TimeStamp) a

Альтернативный способ сделать сложные преобразования JSON - использовать пользовательскую функцию JavaScript.

...