Я получил следующие данные входного потока в Stream Analytics.
[
{
"timestamp": 1559529369274,
"values": [
{
"id": "SimCh01.Device01.Ramp1",
"v": 39,
"q": 1,
"t": 1559529359833
},
{
"id": "SimCh01.Device01.Ramp2",
"v": 183.5,
"q": 1,
"t": 1559529359833
}
],
"EventProcessedUtcTime": "2019-06-03T02:37:29.5824231Z",
"PartitionId": 3,
"EventEnqueuedUtcTime": "2019-06-03T02:37:29.4390000Z",
"IoTHub": {
"MessageId": null,
"CorrelationId": null,
"ConnectionDeviceId": "ew-IoT-01-KepServer",
"ConnectionDeviceGenerationId": "636948080712635859",
"EnqueuedTime": "2019-06-03T02:37:29.4260000Z",
"StreamId": null
}
}
]
Я пытаюсь извлечь массив «values» и указать «t» в элементе массива для TIMESTAMP BY
Мне удалось выполнить запрос с помощью простого оператора SAQL в Stream Analytics, чтобы прочитать входные данные и направить их к выходным данным.Тем не менее, я заинтересован только в массиве "values" выше.
Это моя первая попытка.Мне не нравится мой оператор «TIMESTAMP BY», когда я пытаюсь перезапустить Stream Analytics Job
SELECT
KepValues.ArrayValue.id,
KepValues.ArrayValue.v,
KepValues.ArrayValue.q,
KepValues.ArrayValue.t
INTO
[PowerBI-DS]
FROM
[IoTHub-Input] as event
CROSS APPLY GetArrayElements(event.[values]) as KepValues
TIMESTAMP BY KepValues.ArrayValue.t
============================================================================= Это моя вторая попытка.Мне все еще не нравится мой оператор «TIMESTAMP BY».
With [PowerBI-Modified-DS] As (
SELECT
KepValues.ArrayValue.id as ID,
KepValues.ArrayValue.v as V,
KepValues.ArrayValue.q as Q,
KepValues.ArrayValue.t as T
FROM
[IoTHub-Input] as event
CROSS APPLY GetArrayElements(event.[values]) as KepValues
)
SELECT
ID, V, Q, T
INTO
[PowerBI-DS]
FROM
[PowerBI-Modified-DS] TIMESTAMP BY T
После извлечения, это то, что я ожидал: таблица со столбцами «id», «v», «q», «t» икаждая строка будет иметь один ArrayElement.например,
"SimCh01.Device01.Ramp1", 39, 1, 1559529359833
"SimCh01.Device01.Ramp2", 183.5, 1, 1559529359833
Добавлено
С тех пор я изменил запрос, как показано ниже, для создания DateTime путем преобразования времени Unix t в время DateTime
With [PowerBI-Modified-DS] As (
SELECT
arrayElement.ArrayValue.id as ID,
arrayElement.ArrayValue.v as V,
arrayElement.ArrayValue.q as Q,
arrayElement.ArrayValue.t as TT
FROM
[IoTHub-Input] as iothubAlias
CROSS APPLY GetArrayElements(iothubAlias.data) as arrayElement
)
SELECT
ID, V, Q, DATEADD(millisecond, TT, '1970-01-01T00:00:00Z') as T
INTO
[SAJ-01-PowerBI]
FROM
[PowerBI-Modified-DS]
Мне удается добавить DATEADD () для преобразования Unix Time в DateTime и назвать его как T. Теперь, как я могу добавить TIMESTAMP BY.Я попытался добавить за [PowerBI-Modified-DS].Но редактор жалуется, что вставка недействительна.Что еще я могу сделать.Или это лучшее, что я могу сделать.Я понимаю, что мне нужно установить TIMESTAMP BY, чтобы Power BI понимала, что это потоковые данные.