2016-12-07 2 views
1

Я пытаюсь понять недавно добавленную группу в Riak TS.Поминутно в Riak TS

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

CREATE TABLE Results 
(
    result  VARCHAR NOT NULL, 
    time  TIMESTAMP NOT NULL, 
    PRIMARY KEY (
     (QUANTUM(time, 1, 'm')), 
     time 
    ) 
) 

Вставки

INSERT INTO FreightMinuteResult VALUES ('Novo', '2017-12-07 12:03:45Z'); 
INSERT INTO FreightMinuteResult VALUES ('Novo', '2017-12-07 12:04:45Z'); 
INSERT INTO FreightMinuteResult VALUES ('Novo', '2017-12-07 12:05:45Z'); 
INSERT INTO FreightMinuteResult VALUES ('Novo', '2017-12-07 12:05:46Z'); 

Запрос

select count(*) from FreightMinuteResult where time > '2017-12-07 12:01:00Z' and time < '2017-12-07 12:06:00Z' group by time; 

В результате

+--------+--------------------+ |COUNT(*)| time | +--------+--------------------+ | 1 |2017-12-07T12:04:45Z| | 1 |2017-12-07T12:03:45Z| | 1 |2017-12-07T12:05:45Z| | 1 |2017-12-07T12:05:46Z| +--------+--------------------+

Как подсчитать количество вхождений в минуту с использованием Riak TS?

Спасибо.

ответ

2

Квант используется для организации данных в бэкэнд для оптимизации операций запроса, а группа использует точное значение указанного поля. Временные метки 2017-12-07T12:05:45Z и 2017-12-07T12:05:46Z происходят в одну минуту и ​​поэтому будут храниться в том же месте на диске, но они все еще сохраняются в виде отдельных значений временной метки второго разрешения, которые будут сгруппированы отдельно.

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

+0

Хорошо, спасибо Джо! Я думаю, что документы вводят в заблуждение относительно этой функции. В примерах он гласит: «GROUP BY полезна для агрегирования атрибута устройства за определенный период времени, например, вы можете использовать его для вытягивания средних значений за каждые 30-минутный период за последние 24 часа». Из вашего ответа это означает, что мне нужно создать поле, которое будет отображаться каждые 30 минут, а позже, если я захочу сгруппировать каждые 15 минут, создайте другое поле. Это неудобно. –

+0

Ricardo Я понимаю ваше замешательство, но важно отметить, что GROUP BY в TS работает так же, как GROUP BY в стандартных RDBMS, поскольку поля, которые вы группируете, должны иметь одинаковое значение. Поскольку временные метки в вашем примере не соответствуют каждому уникальному значению «время», он будет создавать свою собственную строку в результирующем наборе. – Craig

+1

Привет Крейг! Спасибо за комментарий! Я понял, однако IMO, как DB Time Series, Riak TS может обрабатывать временные операции на родном языке. Надеюсь, что это в дорожной карте. См.: https://kairosdb.github.io/docs/build/html/restapi/TimeGrouping.html https://docs.influxdata.com/influxdb/v1.1/query_language/data_exploration/#group-by- временные интервалы –