0
  • 您的操作系统(或发行版)的完整详细信息,例如 64 位 Ubuntu 14.04。
    • 在 MacOSX 上运行 InfluxDB/Kapacitor/Chronograf 作为 Docker 容器,最新的 Docker。
  • 您正在运行的 Kapacitor 版本
    • 最新,1.4。
  • 无论您是使用预构建的软件包安装它,还是从源代码构建它。
    • 官方 Docker 容器

我们遇到了 TICKscript 及其 groupBy 行为的问题。

我们有两组测量值,室内温度和室外温度,我们用批处理查询。

查询如下所示:

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)

http输出:

{
  "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')

之后输出仍然看起来应该:

{
  "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 。

4

0 回答 0