My crawler crawled a lot of bitcoin data, I need to generate open/high/low/close from the input stream, I tried the:
data = from(bucket: "dcoin")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "btcusdt" and (r._field == "price"))
open = data |> aggregateWindow(every: v.windowPeriod, fn: first, createEmpty: false)
high = data |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)
low = data |> aggregateWindow(every: v.windowPeriod, fn: min, createEmpty: false)
close = data |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)
join(tables: {open: open, high: high, low: low, close: close}, on: ["_time"])
But it reports:
joins currently must only have two parents
Then I tried another way:
from(bucket: "dcoin")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "btcusdt" and (r._field == "price"))
|> aggregateWindow(every: v.windowPeriod, fn: (column, tables=<-) => ({
open : tables |> first(),
high : tables |> max(),
low : tables |> min(),
close : tables |> last()
}), createEmpty: false)
It’s still not working:
expected [A] but found {open:[B], low:[B], high:[B], close:[B]} for return type (argument fn)
How can I do this in Flux without using InfluxQL?
Thanks in advance!