在 InfluxDB 2.x 中,分组的概念发生了变化。传统的 InfluxDB 版本中使用的 GROUP BY
关键字,在 InfluxDB 2.x 中被替换为 Flux 查询语言中的 group()
函数。Flux 是一种新的查询语言,是 InfluxData 公司开发的一种基于时间序列数据处理和分析的函数式编程语言。
在 Flux 中,可以使用 group()
函数来实现对结果集进行分组。该函数需要指定一个或多个用于分组的标签(tag)作为参数。例如:
from(bucket: "telegraf/autogen")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu")
|> group(columns: ["_field"])
|> max()
这段代码表示从“telegraf”数据库中选择“cpu”测量值,并且在最近 1 小时内查找它们。然后通过 group(columns: ["_field"])
分组,以 _field
标签为基础进行聚合操作,并且计算每个字段值得最大值。
此外,在 Flux 中还有许多其他函数可以用于数据处理和转换。例如,可以使用 pivot()
函数将行转置为列,并且在结果集中创建一个名为“_value”字段,其中包含原始行值:
from(bucket: "telegraf/autogen")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu")
|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
该代码与前面的示例非常相似,但是使用了 pivot()
函数将 _field
值作为列名,并且在结果集中创建一个“_value”字段。这样,在查询结果时就可以更方便地访问每个字段的值。
总之,在 InfluxDB 2.x 中,分组和聚合操作都由 Flux 查询语言来实现,使用 group()
函数进行分组,可以根据需要选择其他函数进行数据处理和转换。