首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InfluxQL -为多个标记选择每个标记的计数

InfluxQL -为多个标记选择每个标记的计数
EN

Stack Overflow用户
提问于 2022-06-06 17:16:52
回答 1查看 315关注 0票数 0

我在InfluxDB中使用的"measurement"名称度量数据如下(idstatustagsvaluefield

{id:"string", status: "string", value: "long"}

我想要描述的每一个进程都可以经历这样的许多状态:A-> B -> C -> A等等。现在我想显示每个status的最终状态的计数--我对临时状态不感兴趣。

例如,对于如下所示的数据集(假设每条新记录都有一个更新的timestamp):

{id:"X", state:"A", value: 1} {id: "X", state: "B", value: 2} {id: "X", state: "C", value: 3} {id: "X", state: "A", value: 1} {id: "Y", state: "A", value: 1} {id: "Y", state: "B", value: 2} {id: "Y", state: "C", value: 3}

我想得到这样的结果:{state: "A", count: 1}{state: "C", count: 1}

现在,我可以通过这样显式地指定stateSELECT count("status") FROM (SELECT last("value"),"status" FROM "measurement" WHERE $timeFilter GROUP BY "id") WHERE "status" =~ /^A$/来实现这一点。

但是,我希望有一个具有所有可能状态的预定义变量,这样我就不需要对每个状态重复该查询。如果我尝试这样的方法:

SELECT count("status") FROM (SELECT last("value"),"status" FROM "measurement" WHERE $timeFilter GROUP BY "id") WHERE "status" =~ /^$var_statuses$/ GROUP BY "status",其中var_statuses是可能的状态列表,如:["A","B","C"]

我的结果是:{state: "A", count: 2}{state: "B", count: 2}, {state: "C", count: 2},因为在开头和结尾之间有一些临时状态。

是否有任何方法来转换我的查询以便使其工作?

EN

回答 1

Stack Overflow用户

发布于 2022-06-07 02:45:28

通过InfluxQL,您可能暂时无法使用regex,因为没有变量支持或在算子中。您可以尝试以下regex查询:

代码语言:javascript
复制
SELECT count("status") FROM (
   SELECT last("value"),"status" 
   FROM "measurement" 
   WHERE $timeFilter 
   GROUP BY "id"
) 
WHERE "status" =~ /(A|B|C)/ 
GROUP BY "status"

如果您正在使用InfluxDB v2,您也可以尝试熔剂 (这是一种脚本语言,并提供了更多的灵活性):

代码语言:javascript
复制
from(bucket:"your-bucket")
    |> range(start: $timeFilterStart, stop:  $timeFilterStop)
    |> filter(fn: (r) => r._measurement == "measurement" and r._field == "value" and r.status = $var_statuses )
    |> group(columns: ["status"])

在那里,您可以使用变量进行替换。

这是博客讨论如何将InfluxQL转换为Flux。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72521225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档