Как не записывать точки в Influxdb 0.8 со временем в секундах

Я хотел бы записать точки в базу данных притока 0.8 с указанием значений времени в секундах через HTTP. Вот примерная точка в формате JSON:

[
    {
        "points": [
            [
                1435692857.0,
                897
            ]
        ],
        "name": "some_series",
        "columns": [
            "time",
            "value"
        ]
    }
]

В документации неясно, какой формат значений времени должен быть (нано или миллисекунды?) И как указать infxdb, чего ожидать. В настоящее время я использую параметр запроса: precision=s

Кажется, все работает нормально, сервер возвращает код состояния HTTP 200, как и ожидалось. При запросе к базе данных с использованием интерфейса администратора притока с использованием select * from some_series точки данных в таблице возвращаются с ожидаемой меткой времени. Однако на графике ось времени проиндексирована с долями секунд, и такие запросы, как select * from some_series where time > now() - 1h, не дают никаких результатов.

Я предполагаю, что что-то не так с отметками времени. Я попытался умножить свое значение на 1000, но потом в базу данных ничего не вставлялось без видимых ошибок.

В чем проблема?


person Matthias    schedule 30.06.2015    source источник


Ответы (2)


По умолчанию предполагается, что предоставленные временные метки указаны в миллисекундах. Я думаю, что ваши записи по умолчанию составляют миллисекунды, потому что параметр строки запроса должен быть time_precision=s, а не precision=s.

См. Подробности в разделе «Точность времени для записанных данных» на сайте https://influxdb.com/docs/v0.8/api/reading_and_writing_data.html.

Я также считаю, что значение time должно быть целым числом, а не числом с плавающей запятой. Я не уверен, как объяснить другое поведение, когда метка времени кажется правильной датой, а умножение на 1000 не решает проблему, но мне интересно, связано ли это с написанием чисел с плавающей запятой.

Пожалуйста, свяжитесь со службой поддержки InfluxDB по адресу [email protected] для получения дополнительной помощи.

person beckettsean    schedule 01.07.2015

Я нашел решение! Проблема была лишь частично в точности. Ваш ответ был правильным, параметр запроса называется time_precision, и я должен отправлять целые числа вместо чисел с плавающей запятой. Вероятно, это было первое, что я предпринял, но безрезультатно ...

Однако из-за некоторых проблем с часовыми поясами мои значения времени в будущем относительно времени сервера и по умолчанию любой оператор select включает оператор where time < now(). Итак, на самом деле значения были записаны в базу данных, но не отображались из-за этого скрытого оператора where. Решением было указать базе данных также возвращать «будущие» значения:

select value from some_series where time < now() + 1h
person Matthias    schedule 01.07.2015