【问题标题】:InfluxDB Continuous Query running on entire time series data在整个时间序列数据上运行的 InfluxDB 连续查询
【发布时间】:2020-01-07 19:43:10
【问题描述】:

如果我的解释是正确的,根据此处提供的文档:InfluxDB Downsampling,当我们使用每 30 分钟运行一次的Continuous Query 对数据进行下采样时,它只运行前 30 分钟的数据。

文档的相关部分:

使用 CREATE CONTINUOUS QUERY 语句生成 CQ:

 CREATE CONTINUOUS QUERY "cq_30m" ON "food_data" BEGIN
  SELECT mean("website") AS "mean_website",mean("phone") AS "mean_phone"
  INTO "a_year"."downsampled_orders"
  FROM "orders"
  GROUP BY time(30m)
END

该查询在数据库 food_data 中创建了一个名为 cq_30m 的 CQ。 cq_30m 告诉 InfluxDB 计算两者的 30 分钟平均值 在测量订单和默认字段中填写网站和电话 RP 两小时。它还告诉 InfluxDB 将这些结果写入 保留政策 a_year 中的测量 downsampled_orders 与 字段键 mean_website 和 mean_phone。 InfluxDB 将运行此查询 前 30 分钟每 30 分钟一次

当我创建 Continuous Query 时,它实际上在整个数据集上运行,而不是在前 30 分钟内运行。我的问题是,这是否仅在第一次发生后才对前 30 分钟的数据而不是整个数据集运行?

我知道查询本身使用GROUP BY time(30m),这意味着它将返回所有分组在一起的数据,但这是否也适用于Continuous Query?如果是这样,我是否应该包含filter 以仅处理Continuous Query 中最后30 分钟的数据?

【问题讨论】:

    标签: time-series grafana influxdb


    【解决方案1】:

    您所描述的是预期的功能。

    时间表和覆盖范围 连续查询对实时数据进行操作。他们使用本地服务器的时间戳、GROUP BY time() 间隔和 InfluxDB 数据库的预设时间边界来确定何时执行以及查询中要覆盖的时间范围。

    CQ 以与 cq_query 的 GROUP BY time() 间隔相同的间隔执行,并且它们在 InfluxDB 数据库预设时间边界的开始处运行。如果 GROUP BY time() 间隔为一小时,则 CQ 在每小时开始时执行。

    当 CQ 执行时,它会针对 now() 和 now() 之间的时间范围减去 GROUP BY time() 间隔运行单个查询。如果 GROUP BY time() 间隔为一小时,当前时间为 17:00,则查询的时间范围为 16:00 到 16:59.999999999。

    所以它应该只处理最后 30 分钟。

    关于第一次运行,这是一个很好的观点。

    我确实设法从旧文档中找到了一个 sn-p

    回填数据 如果在创建新的下采样连续查询时源时间序列中已经有数据,InfluxDB 将及时返回并计算到目前为止所有间隔的值。然后,连续查询将在所有当前和未来的时间间隔内继续在后台运行。

    https://influxdbcom.readthedocs.io/en/latest/content/docs/v0.8/api/continuous_queries/#backfilling-data

    这可以解释您发现的行为

    【讨论】:

    • 谢谢!我没有看旧文档:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    相关资源
    最近更新 更多