InfluxDB v2.1任务运行报unknown column "_source_measurement"错误如何解决
InfluxDB v2.1 任务报unknown column "_source_measurement" 排查方案
根因
该报错是因为你的Flux任务最终需要通过to()函数将结果写入InfluxDB时,默认会读取数据流中的_source_measurement系统列作为写入的measurement元数据,而你代码中的count、sum聚合操作以及后续的map操作已经将该列从数据流中移除,导致读取时报列不存在。
修复方案
- 方案一:直接在map函数中补充
_source_measurement字段即可,修改后的完整代码如下:
from(bucket: "volume_discount") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "nginx_access_log") |> filter(fn: (r) => r["_field"] == "request") |> filter(fn: (r) => r["host"] == "volume-discount-process-server-1") |> count(column: "_value") |> group(columns: ["_time"]) |> sum(column: "_value") |> map(fn: (r) => ({ _time: now(), _field: "request", _measurement: "nginx_access_log", _source_measurement: "nginx_access_log", _value: r._value }))
- 方案二:在
to()函数中显式指定measurement读取列,跳过默认的_source_measurement读取逻辑,原有查询逻辑不变,仅修改最终的to函数参数:
|> to(bucket: "你的目标bucket名", org: "你的组织名", measurementColumn: "_measurement")
额外优化提示
你当前map中把_time设置为now(),所有聚合结果的时间都会被替换为任务运行的当前时间,如果你需要保留聚合对应的时间窗口,可将_time: now()修改为_time: r._time。
内容的提问来源于stack exchange,提问作者Priyanka Jagtap
相关产品推荐
相关产品推荐

