含import语句的Flux脚本通过cURL调用InfluxDB API执行失败
Flux脚本通过cURL执行时import语句报错的解决方法
当Flux脚本包含import语句时,通过cURL调用InfluxDB API执行会报错invalid statement @3:1-3:7: import,但相同逻辑在REPL模式下能正常运行。
可正常运行的REPL操作
influx -precision rfc3339 -type=flux -path-prefix=/api/v2/query > bName = "benchmark_db/autogen" > import "influxdata/influxdb/v1" > v1.measurements(bucket: bName)
报错场景
将上述逻辑封装为/home/demo.flux脚本后,执行以下cURL命令:
curl -XPOST localhost:8086/api/v2/query -sS -H 'Accept:application/csv' -H 'Content-type:application/vnd.flux' --data-binary "@/home/demo.flux"
返回错误:
error loc 3:1-3:7: invalid statement @3:1-3:7: import
解决方案
Flux语法强制要求import语句必须放在脚本的最开头(仅可在注释之后),不能在变量定义或其他执行语句之后。修正后的demo.flux脚本内容如下:
import "influxdata/influxdb/v1" bName = "benchmark_db/autogen" v1.measurements(bucket: bName)
重新执行原cURL命令即可正常运行。
原因说明
REPL模式下允许先定义变量再导入包,是因为REPL是逐行执行并维护上下文状态;但通过API提交的脚本是作为整体解析执行的,必须严格遵循Flux的语法规范,import语句必须优先于其他执行语句。
内容的提问来源于stack exchange,提问作者Munin
相关产品推荐
相关产品推荐

