Условия, зависящие от времени в infxdb

Я экспериментирую с InfluxDB и получаю следующее поведение: после создания нескольких строк с произвольным содержимым я выбираю значение времени ts средней строки и запрашиваю: select * from test where time > ts.

По какой-то причине это возвращает все строки, включая те, которые имеют более низкую временную метку. Я неправильно понимаю синтаксис временных ограничений?

В качестве примечания: если я создаю строки с минутными интервалами и использую условия where time > now() -1m, я получаю только строки, созданные в последнюю минуту.


person user1094206    schedule 13.02.2015    source источник


Ответы (1)


С сайта InfluxDB язык запросов документации:

Обратите внимание, что время - это очень большое число. Это потому, что это эпоха в масштабе микросекунд. InfluxDB всегда сохраняет точки в этом масштабе, но большинство библиотек возвращают время в виде значения шкалы в секундах или миллисекундах. Если вы выбираете конкретную точку, вам нужно знать точную эпоху в масштабе микросекунд, в которой она находится, иначе вы получите неожиданный пустой результат.

Теперь, используя веб-интерфейс по умолчанию, который поставляется с Influx, вы можете видеть временные метки, такие как 1422883121396, а в приведенном выше руководстве вы можете видеть 1400497861762723! Вторая временная метка имеет больше цифр, которые на самом деле представляют собой шкалу микросекунд (не полная, показаны 3, а должно быть 6). Следовательно, при запросе типа time > 1422883121396 вы запрашиваете очень старую дату / время, и, таким образом, возвращаются все результаты.

Решения:

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

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

Есть некоторые приложения, которым может потребоваться такая точность (например, программное обеспечение для моделирования), но в большинстве случаев обходной путь №2 должен работать.

Надеюсь, это решит вашу проблему

person urban    schedule 18.02.2015
comment
Вау, мне пришлось гуглить что такое микросекунда? - person James Gentes; 08.11.2018
comment
В последней версии InfluxDB я вижу, что временные метки теперь указаны в наносекундах, поэтому приведенный выше совет должен быть изменен на добавление 000000000 к временной метке, которая находится в секундах. - person Georgy Vladimirov; 30.07.2019