#python #influxdb #flux-influxdb
#python #influxdb #поток-influxdb
Вопрос:
Мне нужно получить самую высокую (или самую последнюю) временную метку для конкретного измерения во InfluxDB 2.0 с помощью языка запросов Flux с использованием Python API.
Я использовал приведенный ниже запрос для получения временной метки, но я не уверен, как гарантировать, что временная метка, которую я извлекаю с помощью этого метода, действительно является самой последней.
В частности, индексация, которую я использую, last_data[0]
, является произвольной, как last_data
и список объектов, подобных <influxdb_client.client.flux_table.FluxTable object at 0x00000193FA906AC8>
, которые я не уверен, как интерпретировать. Временные метки, похоже, не отсортированы.
from influxdb_client import InfluxDBClient, WriteOptions
client = InfluxDBClient(url=self.influx_url, token=self.token, org=self.org_id, debug=False)
last_data = client.query_api().query(
f'from(bucket:"{self.influx_bucket}") |> range(start: -100d) |> filter(fn: (r) => r["_measurement"] == "{devices[0]}") |> last()'
)
timestamp = last_data[0].records[0]["_stop"]
print(timestamp)
Ответ №1:
Прежде всего, _stop
используется, чтобы сообщить вам конец вашего временного диапазона. В вашем случае это будет просто временная метка времени выполнения запроса, поскольку вы не вводите конечную дату для диапазона. Чтобы получить временную метку для измерения, вам необходимо использовать _time
. Чтобы получить желаемый результат, вам, вероятно, потребуется добавить |> group()
перед вызовом last
функции. Так что это было бы
last_data = client.query_api().query(
f'from(bucket:"{self.influx_bucket}") |> range(start: -100d) |> filter(fn: (r) => r["_measurement"] == "{devices[0]}") |> group() |> last()'