0

以下是我有这个问题的场景。

要求: 在 influxDb 中预先聚合时间序列数据,设备中每个传感器的粒度为秒、分钟、小时、天和周。

当前建议: 当设备载入时,为设备的每个传感器创建五个连续查询(每个粒度级别一个,即秒、分钟...),保留策略与原始时间序列数据的保留策略不同。

当前提案的限制: 随着设备/传感器(时间序列数据源)数量的增加,influx 将因过多的连续查询(不推荐)而变得臃肿,并且会对 influxDb 实例本身造成影响。

问题: 为避免上述问题,是否有可能在同一源测量(即原始时间序列测量)上创建连续查询,但可以使用引入的新标签在测量中区分聚合,以区分来自连续查询的结果与测量中的原始时间序列数据。

例子:

CREATE CONTINUOUS QUERY "strain_seconds" ON "database"
RESAMPLE EVERY 5s FOR 1m
BEGIN
  SELECT MEAN("strain_top") AS "STRAIN_TOP_MEAN" INTO "database"."raw"."strain" FROM "database"."raw"."strain" GROUP BY time(1s),*
END
4

1 回答 1

0

据我所知,并从文档中看到,不可能在连续查询中应用新标签。

如果我正确理解了要求,这是您可以接近它的一种方法。

CREATE CONTINUOUS QUERY "strain_seconds" ON "database"
RESAMPLE EVERY 5s FOR 1m
BEGIN
  SELECT MEAN("strain_top") AS "STRAIN_TOP_MEAN" INTO "database"."raw"."strain" FROM "database"."strain_seconds_retention_policy"."strain" GROUP BY time(1s),*
END

这会将数据保存在相同的度量中,但保留策略不同 - strain_seconds_retention_policy。当您执行 a 时,select您指定要从中选择的相应保留策略。
请注意,不可能同时执行select多个保留策略。如果您不指定一个,则使用默认的一个(而不是全部)。如果这是您需要的东西,那么可以使用另一种方法。

我不太明白为什么您需要为每个设备和每个传感器定义一个连续查询。您只需要定义五个(每秒 1 个,分钟,小时,天,周)并执行group by *您已经执行的(全部)。只要源数据点有一个带有相应设备和传感器 id 的标签,重新采样的数据点也会有它。任何新添加的设备(数据)都将由这 5 个查询自动处理并保存到相应的保留策略中。

如果您确实想应用其他标签,您可以在自定义脚本中处理数据库外部的数据,并使用您需要的任何其他标签将其写回,而不是使用连续查询

于 2020-01-29T14:06:19.963 回答