Influxdb中的汇总流量查询

问题描述

我是Influxdb的新手。我正在使用1.8+ Influxdb和com.influxdb:influxdb-client-java:1.11.0。我的身高低于标准

stocks {
  (tag) symbol: String
  (field) price: Double
  (field) volume: Long
  (time) ts: Long
}

我正在尝试用15分钟的窗口查询测量结果。我有以下查询

"from(bucket: \"test/autogen\")" +
  " |> range(start: -12h)" +
  " |> filter(fn: (r) => (r[\"_measurement\"] == \"$measurementName\" and r[\"_field\"] == \"volume\"))" +
  " |> cumulativeSum(columns: [\"_value\"])" +
  " |> window(every: 15m,period: 15m)"

我相信上面的查询将计算数据的累计总和,并仅返回volume字段。但是,我希望在单个通量查询中进行包括价格,符号和ts在内的整个度量以及交易量的累积和。我不确定该怎么做。任何帮助表示赞赏。谢谢。

解决方法

感谢Ethan Zhang。助焊剂输出表对字段使用垂直(列方式)数据布局。 请注意,价格和数量字段存储为两个单独的行。 为了获得结果,您可以使用名为v1.fieldsAsCols()的函数将表从垂直布局转换回水平布局。以下是其文档的链接:https://docs.influxdata.com/influxdb/v2.0/reference/flux/stdlib/influxdb-v1/fieldsascols/ 因此查询可以重写如下:样本查询1

from(bucket: \"test/autogen\")
|> range(start: -1h)
|> filter(fn: (r) => r["_measurement"] == "stocks"))
|> v1.fieldsAsCols()
|> group()
|> cumulativeSum(columns: ["volume"])
|> window(every: 15m,period: 15m)

另一种方法是使用数据透视:示例查询2

from(bucket: \"test/autogen\")
|> range(start: -1h)
|> filter(fn: (r) => r["_measurement"] == "stocks")
|> pivot(rowKey:[\"_time\"],columnKey: [\"_field\"],valueColumn: \"_value\")
|> group()
|> cumulativeSum(columns: ["volume"])
|> window(every: 15m,period: 15m)