InfluxDB Flux: получить самую последнюю временную метку для измерения через Python API

#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()'