Как сбалансировать режим строки и режим столбца в cygnus?

У меня есть метеостанция, которая передает данные каждый час. В течение этого часа он делает четыре записи (по одной каждые 15 минут). В моей текущей ситуации я использую attr_persistence=row для хранения данных в моей базе данных MySql.

В режиме строки я получаю сгенерированные по умолчанию столбцы:

recvTimeTs | recvTime | entityId | entityType | attrName | attrType | attrValue | attrMd

Но моя метеостанция присылает мне следующие данные:

 |   attrName    | attrValue

   timeRecorded   14:30:0,22.5.2015
   measurement1   18.799
   measurement2   94.0
   measurement3   1.19

Эти attrValue представлены в базе данных в виде строки.

Есть ли способ оставить три измерения в режиме строки и переключить timeRecorded в режим столбца? А если нет, то какая мне альтернатива?

Смысл всего этого в том, чтобы запросить записанное значение времени, но я не могу запросить дату, пока она является строкой.

В качестве примечания: о том, чтобы метеостанция отправляла данные, как только они были записаны (каждые 15 минут), не может быть и речи, во-первых, потому что мне нужно экономить заряд батареи и, что более важно, потому что в случае проблемы с почтой , он отправит все записи сразу.

Таким образом, если целый день не было отправлено никаких данных, метеостанция отправит все показания 24*4 одновременно...


person Vrankela    schedule 22.05.2015    source источник
comment
Мне нужно, чтобы вы немного подробнее рассказали о своем вопросе, пожалуйста. Как отправить 4 измерения в одном уведомлении Orion? Вы используете 4 разных атрибута? Или один многозначный атрибут? Кстати, это 4 меры или 3, как вы описываете в примере?   -  person frb    schedule 27.05.2015
comment
Что касается значения TimeRecorded, вы можете преобразовать его в временную метку MySQL, используя такие функции MySQL, как STR_TO_DATE: date-in-mysql" title="как преобразовать строку в дату в mysql"> stackoverflow.com/questions/5201383/   -  person frb    schedule 27.05.2015
comment
@frb Я использую 4 разных атрибута: три измерения и записанное время.   -  person Vrankela    schedule 27.05.2015
comment
SELECT STR_TO_DATE( attrValue, '%m/%d/%Y' ) FROM ``def_servpath_0004_weatherstation`` @frb Я только что попробовал этот скрипт, и он всегда дает NULL, может быть, потому, что на самом деле это дата на каждом четвертом месте.   -  person Vrankela    schedule 27.05.2015
comment
Хорошо, 3 такта... просто предупреждаю: 3 такта покроют только 45 минут или целый час :) Я имею в виду, у вас будут такты на 16:15, 16:30 и 16:45, а с 16: 45 до :17:15 у вас есть разрыв o 30'. В любом случае, это не важно с точки зрения вопроса.   -  person frb    schedule 27.05.2015
comment
Я неправильно понял ваш вопрос, я имел в виду, что для каждого из ЧЕТЫРЕХ измерений в час метеостанция отправляет эти ЧЕТЫРЕ атрибута. Но он отправляет все четыре измерения отдельно! один за другим. Надеюсь, теперь мы разобрались :)   -  person Vrankela    schedule 27.05.2015


Ответы (1)


Предлагаемое решение состоит в том, чтобы использовать функцию STR_TO_DATE MySQL, чтобы преобразовать сохраненный строковый атрибут «timeRecorded» в реальный тип MySQL Timestamp.

Тем не менее, атрибут «timeRecorded» появляется каждые 4 строки в таблице из-за режима сохранения атрибута «row» OrionMySQLSink. В этом случае я думаю, что вы можете использовать ключевое слово ROWNUM из MySQL, чтобы получить только каждые 4 строки, что-то вроде (не эксперт по MySQL):

SELECT STR_TO_DATE( attrValue, '%m/%d/%Y' ) FROM def_servpath_0004_weatherstation where (ROWNUM / 4 = 0);

Альтернативой является переход в режим «столбца» (в этом случае вы должны самостоятельно подготовить таблицу). При использовании этого режима у вас будет одна строка со всеми 4 атрибутами, одним из этих атрибутов является «timeRecorded». В этом случае вы можете предоставить таблицу, напрямую указав тип столбца «timeRecorded» как «Отметка времени» вместо «Текст». Таким образом, вы избежите части STR_TO-DATE.

person frb    schedule 27.05.2015
comment
ваш ответ имеет смысл, но по какой-то причине он не будет работать в моем примере. Я попытался преобразовать следующие форматы из строки в дату, но все они дают NULL: 2015-04-30T16:50:42.87 и 15:15:0,30.4.2015 - person Vrankela; 27.05.2015