groupBy не группируется по тегу, созданному с помощью eval после объединения
- Полная информация о вашей операционной системе (или дистрибутиве), например, 64-битная Ubuntu 14.04.
- Запуск InfluxDB/Kapacitor/Chronograf в качестве Docker-контейнеров на MacOSX, последняя версия Docker.
- Версия Kapacitor, которую вы используете
- Последний, 1.4.
- Независимо от того, установили ли вы его с помощью предварительно собранного пакета или создали его из исходного кода.
- Официальный контейнер Docker
Мы столкнулись с проблемой с TICKscript и его поведением groupBy.
У нас есть два набора измерений: indoor_temperas и outdoor_temperas, которые мы запрашиваем с помощью пакета.
Запросы выглядят следующим образом:
var out_temp = batch
|query('SELECT mean(temperature) FROM yyyy')
.every(10s)
.period(120d)
.groupBy(time(1h))
.fill(0)
var in_temp = batch
|query('SELECT mean(temperature) FROM xxxx')
.every(10s)
.period(120d)
.groupBy(time(1h))
.fill(0)
Если мы отправим HTTP по обоим из них, они создадут следующие наборы данных:
{
"series": [
{
"name": "outdoor_temperatures",
"columns": [
"time",
"mean"
],
"values": [
[
"2017-09-20T17:00:00Z",
0
],
[
"2017-09-20T18:00:00Z",
11.5
]
... the rest
]
}
]
}
{
"series": [
{
"name": "indoor_measurements",
"columns": [
"time",
"mean"
],
"values": [
[
"2017-09-20T17:00:00Z",
585.44012944984
],
[
"2017-09-20T18:00:00Z",
592.94890510949
]
... the rest
]
}
]
}
Теперь мы полностью объединяем их, что дает нам ожидаемые результаты.
out_temp
|join(in_temp)
.as('out_temp_mean', 'in_temp_mean')
.tolerance(5m)
.fill(0)
httpOut:
{
"series": [
{
"name": "outdoor_temperatures",
"columns": [
"time",
"in_temp_mean.mean",
"out_temp_mean.mean"
],
"values": [
[
"2017-09-20T17:00:00Z",
586.10175438596,
0
],
[
"2017-09-20T18:00:00Z",
592.94890510949,
11.5
]
... the rest
]
}
]
}
Который выглядит идеально. Проблема возникает, когда мы хотим округлить out_temp_mean.mean
вниз и группа
Итак, мы идем вперед и расширяем сценарий
out_temp
|join(in_temp)
.as('out_temp_mean', 'in_temp_mean')
.tolerance(5m)
.fill(0)
|eval(lambda: string(floor("out_temp_mean.mean")))
.as('bucket')
.tags('bucket')
.keep('out_temp_mean.mean', 'in_temp_mean.mean')
После чего вывод STILL выглядит так, как должен:
{
"series": [
{
"name": "outdoor_temperatures",
"columns": [
"time",
"in_temp_mean.mean",
"out_temp_mean.mean",
"bucket"
],
"values": [
[
"2017-09-20T17:00:00Z",
586.99190283401,
0,
"0"
],
[
"2017-09-20T18:00:00Z",
592.94890510949,
11.5,
"11"
]
]
}
]
}
Теперь осталось только сгруппировать значения по новой корзине тегов:
out_temp
|join(in_temp)
.as('out_temp_mean', 'in_temp_mean')
.tolerance(5m)
.fill(0)
|eval(lambda: string(floor("out_temp_mean.mean")))
.as('bucket')
.tags('bucket')
.keep('out_temp_mean.mean', 'in_temp_mean.mean')
|groupBy('bucket')
После чего все идет не так, и нас встречают series: null
{
"series": null
}
Это ожидаемое поведение? Жук? Или что-то другое?
Также подал это как https://github.com/influxdata/kapacitor/issues/1765 если кто-то задается вопросом.