0

У меня есть проект, который использует концентратор событий для получения данных, это отправляется каждую секунду, данные принимаются на веб-сайте с помощью SignalR, все это работает нормально, я хранили данные в blob хранилище с помощью задания Stream Analytics, но это очень медленный доступ, и с объемом данных, которые я получаю всего на 6 устройствах, он будет становиться еще медленнее, поскольку это увеличивается, мне нужно получить доступ к данным для отображения исторических данных через графиков на веб-сайте, а затем он пополняется текущими данными, поступающими.Результаты аналитики потока

Мне не нужно хранить данные каждую секунду, поэтому мы думали о том, чтобы хранить их только каждые 30 секунд, а в SQL DB, то, что я пытаюсь сделать, все равно получает данные каждую секунду, но только сохраняет их каждые 30, я пробовал барабанный windo w, но из того, что я вижу, это просто сбрасывает все каждые 30 секунд вместо отдельных записей.

Я пропустил понимание Tumbling, Sliding и Hopping windows, я предполагаю, что я не могу использовать их таким образом? если это так, я предполагаю, что это единственный способ сделать это, было бы иметь выходной db как входной сигнал, поэтому я могу перекрестно ссылаться на метку времени с текущим временем?

, если у кого нет каких-либо других идей? любая помощь будет оценена по достоинству.

Благодаря

ответ

0

Если вы пытаетесь объединить 30 записей в одной итоговой строке каждые 30 секунд затем акробатика окно является хорошим выбором. Нечто подобное должно работать:

SELECT System.TimeStamp AS OutTime, TollId, COUNT(*) as cnt, sum(TollCharge) as TollCharge 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY TollId, TumblingWindow(second, 30) 
0

Спасибо за ответ, я говорил с моим контактом в Microsoft, и он предложил что-то подобное, я также нашел что-то подобное, что в различных примерах в Интернете. то, что я действительно хочу сделать, только обновляет базу данных данными каждые 30 секунд. поэтому я получу событие, сохраню его, и я не буду хранить его снова, пока не пройдет 30 секунд. Я не уверен, как я могу это сделать и работать с ASA, чтобы быть честным, поскольку мне нужно иметь запись о последнем обновлении, на самом деле у меня есть соединение с центром событий с моего веб-сайта, поэтому в приемнике , Я собираюсь выполнить простую проверку, а затем сохранить данные оттуда.

+0

Я не знаю, можете ли вы просто приостановить выход. Вы хотите сохранить каждую входящую строку? Но только один раз каждые 30 секунд? Зачем? – GregGalloway

1

я я скучаю понимание кувыркаясь, Раздвижные и Hopping окна

Вы правы, что это поставит все события в акробатической/Скользящие/окно Hopping вместе. Однако это допустимо только в группе, которая требует агрегатной функции над этой группой.

Существует совокупная функция Collect(), которая создаст массив событий внутри группы.

Я думаю, что это должно быть возможно, когда вы группируете каждое событие в течение 30 секундного окна поворота, используя Collect(), а затем на следующем шаге CROSS APPLY каждой записи, которая должна выводить все полученные события за 30 секунд.

With Grouper AS (
    SELECT Collect() AS records 
    FROM Input TIMESTAMP BY time 
    GROUP BY TumblingWindow(second, 30) 
) 
SELECT 
    record.ArrayValue.FieldA AS FieldA, 
    record.ArrayValue.FieldB AS FieldB 
INTO Output 
FROM Grouper 
CROSS APPLY GetArrayElements(Grouper.records) AS record 

 Смежные вопросы

  • Нет связанных вопросов^_^