Ошибка запроса SiddhiQL: несоответствие ввода "группа"

Я использую простой запрос SiddhiQL, чтобы получить количество записей, имеющих одинаковую временную метку до минутной записи и эти временные метки. Запрос:

from inputStream
select time:dateFormat(ts,'yyyy-MM-dd HH:mm') as formatedTs, count(formatedTs)
group by formatedTs
insert into outputStream;

Выдает ошибку mismatched input 'group' expecting {'*', '+', '-', '/', '%', '<', '<=', '>', '>=', '==', '!=', AS, OR, AND, IN}. Что не так с предложением group by в этом контексте?


person aneela    schedule 18.06.2016    source источник
comment
Вы можете попробовать group by time:dateFormat(ts,'yyyy-MM-dd HH:mm')   -  person Mike    schedule 18.06.2016
comment
Я сделал, но это не помогает, появляется такая же ошибка   -  person aneela    schedule 18.06.2016
comment
и то же самое с count (time: dateFormat (ts, 'yyyy-MM-dd HH: mm')) Извините, я не знаком с этим конкретным sql   -  person Mike    schedule 18.06.2016
comment
Если убрать счетчик и группу по, это работает?   -  person Mike    schedule 18.06.2016


Ответы (1)


Причина ошибки:

Эта конкретная ошибка возникает из-за отсутствия AS, следующего за count(formatedTs)

(Это также указывается в сообщении об ошибке. mismatched input 'group' expecting {'*', '+', '-', '/', '%', '<', '<=', '>', '>=', '==', '!=', AS, OR, AND, IN} Компилятор запросов считает, что group находится не в том месте из-за отсутствия AS)

Требуется исправление:

Таким образом, оператор select необходимо исправить, как показано ниже:

select time:dateFormat(ts,'yyyy-MM-dd HH:mm') as formatedTs, count(formatedTs) as tsCount

Дальнейшие исправления, которые могут вам понадобиться:

Кроме того, есть ли у inputStream атрибут с именем formatedTs? В противном случае после исправления оператора select вы получите еще одну ошибку, как показано ниже:

Не удается найти тип атрибута, поскольку 'formatedTs' не существует в 'inputStream'

потому что атрибут, для которого вы проводите подсчет, должен существовать в inputStream

В этом случае вам может помочь следующий запрос (который должен успешно скомпилироваться):

from inputStream
select time:dateFormat(ts,'yyyy-MM-dd HH:mm') as formatedTs, count(ts) as countTs
group by ts
insert into outputStream;

Обновлять

Обновление запроса, поскольку вам необходимо сгруппировать по отформатированной метке времени:

from inputStream
select time:dateFormat(ts,'yyyy-MM-dd HH:mm') as formatedTs
insert into innerStream;

from innerStream
select formatedTs, count(formatedTs) as countTs
group by formatedTs
insert into outStream;
person Dilini    schedule 18.06.2016
comment
Это помогло, но мой входной поток имеет seconds в timestamp, т.е. ts, и мне нужно общее количество записей на minute, поэтому я отформатировал дату, чтобы исключить запись seconds. Теперь, если я использую ts в предложениях count и group by, я не смогу получить желаемый результат. Итак, я использую time:dateFormat(ts,'yyyy-MM-dd HH:mm') как в count, так и в group by, и теперь он говорит в group by пункте mismatched input ':' expecting {',', HAVING, INSERT, DELETE, UPDATE, RETURN, OUTPUT}. Есть ли другой способ сделать то, что я хочу? - person aneela; 18.06.2016
comment
Я сделал то же самое, но даже предложение group by вызывало некоторые проблемы, и мне выдали ошибку stream definition already exist. Работа была проделана с другим промежуточным потоком. Я вставил требуемые результаты во временный поток, а затем использовал select * для вставки в окончательный поток вывода. Не знаю почему, но это сработало. Пожалуйста, обновите отредактированную версию, чтобы я мог отметить ответ как правильный. - person aneela; 18.06.2016
comment
Рад, что у вас получилось работать :) Однако я почти уверен, что обновленный запрос успешно компилируется. Вы пробовали точно такой же запрос? Кстати, если вы нашли что-то другое, что сработало для вас, вы можете опубликовать это в качестве ответа. - person Dilini; 18.06.2016
comment
Спасибо, ваш ответ правильный, нет необходимости публиковать мой собственный. - person aneela; 19.06.2016