CollectTop возвращает больше строк, чем я ожидал бы в Azure Stream Analytics. - PullRequest
1 голос
/ 05 августа 2020

У меня есть следующие данные (тестирование на портале Azure), которые я загрузил:

[
  {"engineid":"engine001","eventtime":1,"tmp":19.3,"hum":0.22},
  {"engineid":"engine001","eventtime":2,"tmp":19.7,"hum":0.21},
  {"engineid":"engine002","eventtime":3,"tmp":20.4,"hum":0.25},
  {"engineid":"engine001","eventtime":4,"tmp":19.6,"hum":0.24}
]

Затем я пытаюсь получить группу записей, чтобы у меня были 2 последние строки для каждого двигатель. Как вы можете видеть в образце, у меня всего 2 разных движка, поэтому я ожидал бы вывода с двумя записями, каждая из которых содержит ранжированные записи, но я получаю 4 выходные записи.

Это мой запрос:

-- Taking relevant fields from the input stream
WITH RelevantTelemetry AS
(
    SELECT  engineid, tmp, hum, eventtime
    FROM    [engine-telemetry] 
    WHERE   engineid IS NOT NULL
),
-- Grouping by engineid in TimeWindows
TimeWindows AS
(
    SELECT engineid, 
        CollectTop(2) OVER (ORDER BY eventtime DESC) as TimeWindow
    FROM
        [RelevantTelemetry]
    WHERE engineid IS NOT NULL
    GROUP BY SlidingWindow(hour, 24), engineid
)
--Output timewindows for verification purposes
SELECT TimeWindow
INTO debug
FROM TimeWindows

Я играл со свойством TIMESTAMP BY, изменил порядок GROUP BY, et c, но все же у меня остаются следующие 4 записи, а не 2, которые я ожидал:

Есть идеи?

[
{"TimeWindow":
  [
    {"rank":1,"value": "engineid":"engine001","tmp":0.0003,"hum":-0.0002,"eventtime":1}}
  ]},
{"TimeWindow":
  [
    {"rank":1,"value":{"engineid":"engine001","tmp":-0.0019,"hum":-0.0002,"eventtime":4}},
    {"rank":2,"value":{"engineid":"engine001","tmp":-0.0026,"hum":-0.0002,"eventtime":2}},
    {"rank":3,"value":{"engineid":"engine001","tmp":0.0003,"hum":-0.0002,"eventtime":1}}
  ]},
{"TimeWindow":
  [
    {"rank":1,"value":{"engineid":"engine002","tmp":0.0017,"hum":0.0003,"eventtime":3}}
  ]},
{"TimeWindow":
  [
    {"rank":1,"value":{"engineid":"engine001","tmp":-0.0019,"hum":-0.0002,"eventtime":4}},
    {"rank":2,"value":{"engineid":"engine001","tmp":-0.0026,"hum":-0.0002,"eventtime":2}}
  ]}
]

1 Ответ

1 голос
/ 07 августа 2020

Как предлагает @SteveZhao, вам нужно использовать GROUP BY TumblingWindow(hour, 24), engineid вместо GROUP BY SlidingWindow(hour, 24), engineid

Скользящее окно может перекрывать записи в зависимости от временного интервала enter image description here

For more information refer: https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-window-functions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...