【问题标题】:Aggregate Flux Query in InfluxdbInfluxdb 中的聚合通量查询
【发布时间】:2020-12-27 08:50:55
【问题描述】:

我是 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)"

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

【问题讨论】:

    标签: influxdb


    【解决方案1】:

    感谢 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2013-12-06
      • 2012-08-26
      • 1970-01-01
      相关资源
      最近更新 更多