问题描述
我是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
}
"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)