全外连接抱怨 Return 是一个函数

问题描述 投票:0回答:1

我使用以下查询从我的 InfluxDB 获取表

from(bucket: "external")
            |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
            |> filter(fn: (r) => r["_measurement"] == "Elektro")
            |> filter(fn: (r) => r["_field"] == "Verbrauch")
            |> filter(fn: (r) => contains(value: r["_zaehler"], set: strings.split(v: "IT A1,IT A2,IT A3,Carrier A,IT B1,IT B2,IT B3,Carrier B", t: ",")))
            |> group(columns: ["_time"])
            |> sum()
            |> map(fn: (r) => ({ r with _field: "Summe IT" }))
            |> group(columns: ["_time"])

此查询结果如下表:

然后使用完整的外部联接,我尝试将表本身联接起来(在 _time 列上):

join.full(
    left: (
        from(bucket: "external")
            |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
            |> filter(fn: (r) => r["_measurement"] == "Elektro")
            |> filter(fn: (r) => r["_field"] == "Verbrauch")
            |> filter(fn: (r) => contains(value: r["_zaehler"], set: strings.split(v: "IT A1,IT A2,IT A3,Carrier A,IT B1,IT B2,IT B3,Carrier B", t: ",")))
            |> group(columns: ["_time"])
            |> sum()
            |> map(fn: (r) => ({ r with _field: "Summe IT" }))
            |> group(columns: ["_time"])
            |> yield(name: "left")
    ),
    right:
        (
        from(bucket: "external")
            |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
            |> filter(fn: (r) => r["_measurement"] == "Elektro")
            |> filter(fn: (r) => r["_field"] == "Verbrauch")
            |> filter(fn: (r) => contains(value: r["_zaehler"], set: strings.split(v: "IT A1,IT A2,IT A3,Carrier A,IT B1,IT B2,IT B3,Carrier B", t: ",")))
            |> group(columns: ["_time"])
            |> sum()
            |> map(fn: (r) => ({ r with _field: "Summe IT" }))
            |> group(columns: ["_time"])
            |> yield(name: "right")
    ),
    on: (l, r) => (l._time == r._time),
    as: (l, r) => ({l}),
)

但这会导致:

error @21:1-21:5: expected {
    A with
    full: (
        as: (l: B, r: C) => {l: B},
        left: stream[{D with _field: string}],
        on: (l: {E with _time: F}, r: {G with _time: H}) => bool,
        right: stream[{I with _field: string}],
    ) => stream[J],
} (record) but found (<-tables: K, ?method: string, ?on: [string]) => stream[L] (function)

表格的格式将保留,实际上,

["_zaehler"]
列会有不同的数组。

我尝试将代码中的

as
部分更改为
as: (l, r) => (l),
。 我还尝试删除
yield
并用
group()
替换最后一个分组。 另外,将字符串的分割更改为常规数组也没有帮助。

这些都不起作用。 我只是不明白为什么 join 返回一个函数(这至少是我解释错误消息的方式)。 我的输入数据对我来说似乎很好,但看起来这就是问题所在。

influxdb influxdb-2
1个回答
0
投票

我自己弄清楚了。 我实际上忘记了

import "join"
。 不知怎的,忘记导入会导致这个晦涩的错误消息。 我希望其他遇到同样问题的人可以得到这个答案的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.