Запрос Influx-DB Uniq

Я пытаюсь выполнить запрос к INFLUX-DB, чтобы получить уникальные значения. Ниже показан запрос, который я использую,

select host AS Host,(value/100) AS Load from metrics  where time > now() - 1h and command='Check_load_current' and value>4000;

Вывод запроса:

введите описание изображения здесь

На самом деле мне нужны уникальные значения "Host". Например, я хочу, чтобы вывод "host-1" повторялся только один раз (последнее значение), несмотря на то, что значения нагрузки другие. Как я могу этого добиться? Любая помощь будет очень полезной.


person Pradeep s    schedule 20.06.2018    source источник
comment
Взгляните на этот вопрос: stackoverflow.com/questions/10452940/. Они делают нечто подобное.   -  person sanastasiadis    schedule 20.06.2018


Ответы (2)


В: Мне нужны самые последние значения для каждого уникального "хоста", как мне этого добиться?

Учитывая следующую базу данных:

time                host   value
----                ----   -----
1529508443000000000 host01 42.72
1529508609000000000 host05 53.94
1529508856000000000 host01 40.37
1529508913000000000 host02 41.02
1529508937000000000 host01 44.49

A: Рассмотрите возможность разбора проблемы.

Сначала вы можете сгруппировать «значения тегов» в их отдельные сегменты, используя операцию «Группировать».

Select * from number group by "host"

name: number
tags: host=host01
time                value
----                -----
1529508443000000000 42.72
1529508856000000000 40.37
1529508937000000000 44.49

name: number
tags: host=host02
time                value
----                -----
1529508913000000000 41.02

name: number
tags: host=host05
time                value
----                -----
1529508609000000000 53.94

Затем вы захотите упорядочить данные в каждом сегменте в порядке убывания, а затем указать influxdb, чтобы он возвращал только верхнюю 1 строку каждого сегмента.

Следовательно, добавьте к первому запросу фильтр «Порядок по DESC» и фильтр «Ограничение 1», и он должен дать вам желаемый результат.

> select * from number group by "host" order by desc limit 1;
name: number
tags: host=host05
time                value
----                -----
1529508609000000000 53.94

name: number
tags: host=host02
time                value
----                -----
1529508913000000000 41.02

name: number
tags: host=host01
time                value
----                -----
1529508937000000000 44.49

Ссылка:

https://docs.influxdata.com/influxdb/v1.5/query_language/data_exploration/#the-group-by-clause

https://docs.influxdata.com/influxdb/v1.5/query_language/data_exploration/#order-by-time-desc

https://docs.influxdata.com/influxdb/v1.5/query_language/data_exploration/#the-limit-and-slimit-clauses

person Samuel Toh    schedule 24.06.2018

Если вы хотите получить только последнее значение для каждого уникального тега host, выполните следующие действия:

SELECT host AS Host, last(value)/100 AS Load
FROM metrics
GROUP BY host
person WindyFields    schedule 21.06.2018
comment
Спасибо за ваш ответ. Я пробовал использовать group by, но он показывает все значения host-1 и host-2 в группах. - person Pradeep s; 21.06.2018
comment
Обычно, когда вы используете базу данных временных рядов, полученные вами данные предназначены для обработки другой программой (например, инструментом визуализации), а не человеком. Вы не должны заботиться о том, как выглядит результат, поскольку он дает вам то, о чем вы просили. Однако, если вы хотите выполнить запрос из CLI и получить вывод в другом формате, вы можете указать вывод следующим образом: influxdb -execute "SELECT ..." -ouput csv, также вы можете указать json. Полученные вами выходные данные не будут сгруппированы, а будут возвращены в виде одного списка. - person WindyFields; 22.06.2018
comment
Я использовал select host AS Host, (value / 100) AS Load from metrics, где time ›now () - 1h и command = 'Check_load_current' и значение› 4000 group by host order by time desc limit 1; что почти решило мою цель. - person Pradeep s; 22.06.2018