gpt4 book ai didi

graphite - 在 Graphite 中计算 groupByNode() 结果的百分比

转载 作者:行者123 更新时间:2023-12-02 15:15:30 24 4
gpt4 key购买 nike

我有两组 Graphite 系列,都是这种格式。第二组是相同的,除了它有前缀“x.y”而不是“a.b”。

 a.b.ccc.a1.hr
a.b.ccc.a2.hr
a.b.ccc.a3.hr
a.b.ddd.a1.hr
a.b.ddd.a4.hr

要按第 3 个节点分组,我使用 groupByNode(a.b.*.*.hr,2,"sumSeries"),这会得到两个系列:cccddd。我想将第一组中的 cccddd 系列除以第二组中的相应系列。如何在 map/reduce 函数中使用 groupByNode 的结果?

最佳答案

这是可能的,但很棘手,或者至少我不知道有更简单的可扩展方式。

请注意,下面的方法使用了 mapSeries/reduceSeries仅在 graphite-web 中可用的功能 master (不是 0.9.x,请参阅下面的适用于 0.9.x 的手动方法)

我们从 2 个系列列表开始,每个列表包含 cccddd :

groupByNode(a.b.*.*.hr,2,"sumSeries")
groupByNode(x.y.*.*.hr,2,"sumSeries")

现在我们需要将它们放入包含所有项目的单个 seriesList 中,因此首先我们需要再次使它们可区分:

aliasSub(groupByNode(a.b.*.*.hr,2,"sumSeries"), "$", ".a_b")
aliasSub(groupByNode(x.y.*.*.hr,2,"sumSeries"), "$", ".x_y")

现在我们有 ccc.a_b , ddd.a_b , ccc.x_y , 和 ddd.x_y , 我们可以使用 group 将它们放入一个列表中:

group(
aliasSub(groupByNode(a.b.*.*.hr,2,"sumSeries"), "$", ".a_b"),
aliasSub(groupByNode(x.y.*.*.hr,2,"sumSeries"), "$", ".x_y")
)

现在我们可以从 map/reduce 开始:

reduceSeries(
mapSeries(
group(
aliasSub(groupByNode(a.b.*.*.hr,2,"sumSeries"), "$", ".a_b"),
aliasSub(groupByNode(x.y.*.*.hr,2,"sumSeries"), "$", ".x_y")
),
0
),
"asPercent", 1, "a_b", "x_y"
)

此时我们将得到 ccc.reduce.asPercentddd.reduce.asPercent , 然后你可以把整个东西包装在另一个 aliasByNode(<query>, 0) 中如果你只想要 cccddd .

这和调用本质上是一样的:

group(
alias(asPercent(
groupByNode(a.b.ccc.*.hr,2,"sumSeries"),
groupByNode(x.y.ccc.*.hr,2,"sumSeries"),
), "ccc"),
alias(asPercent(
groupByNode(a.b.ddd.*.hr,2,"sumSeries"),
groupByNode(x.y.ddd.*.hr,2,"sumSeries"),
), "ddd")
)

当然,如果您添加 eee 它会继续工作等等

关于graphite - 在 Graphite 中计算 groupByNode() 结果的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40926039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com