要点总结:InfluxDB 技术提示:使用 InfluxDB 的参数化 Flux 查询

导航至

如果您熟悉 InfluxDB v2,那么您可能已经熟悉 Flux 了。Flux 使您能够以任何您需要的方式转换数据,并编写自定义任务、检查和通知规则。但您可能不知道的是,Flux 现在在 InfluxDB v2 Cloud 中支持参数化查询。参数化查询允许您提供参数,这些参数随后被插入到 Flux 查询中以供执行。参数化查询目前只能与 InfluxDB v2 API 一起使用,但很快将登陆 InfluxDB 用户界面。

编写您的第一个参数化 Flux 查询

对于最基本的示例,我们将传入一个 bucket 名称作为参数化 Flux 查询的参数。Flux 脚本如下所示

"from(bucket:params.mybucket) 
|> range(start: -7d) 
|> limit(n:2)","params":{"mybucket":"telegraf"}"

Flux 引擎会将 params.mybucket 替换为我们要查询的 bucket 名称。我们在 Flux 查询请求负载的末尾指定 mybucket 参数的值,使用 "params":{"mybucket":"telegraf"} 来查询 "telegraf" bucket。由于此查询必须使用 API 执行,我们将查询转换为 JSON 以执行以下 cURL 请求

curl -X POST \
'https://us-west-2-1.aws.cloud2.influxdata.com/api/v2/query?orgID=<myOrgID>' \
  -H 'authorization: Token <myToken>' \
  -H 'content-type: application/json' \
  -d '{"query":"from(bucket:params.mybucket) |> range(start: -7d) |> limit(n:2)","params":{"mybucket":"telegraf"}}'

就这么简单!现在您可以开始构建参数化查询,以保护您的物联网应用程序并帮助防止注入攻击。参数化查询还使更新查询以反映新的 bucket、过滤器或时间戳变得容易,并鼓励代码重用。

参数化 Flux 查询的类型

使用参数化 Flux 查询非常简单。参数化 Flux 查询支持 int、float 和 string 类型的参数。但是,Flux 本身支持更多类型,例如 duration 和其他类型。因此,您必须确保正确键入日期参数。例如,如果您想将参数设置为时间戳,则必须使用 duration() 函数将该值转换为 duration。您的请求正文应如下所示:

{"query":"from(bucket:\"telegraf\") |> range(start: duration(v : params.mystart)) |> limit(n:2)","params":{"mystart":"-7d"}}

关于使用 InfluxDB 的参数化 Flux 查询的最终想法

我希望这篇 InfluxDB 技术提示文章能够激励您利用 InfluxDB v2 的参数化 Flux 查询。如果您正在使用 Flux 并且需要帮助,请在我们的 社区网站Slack 频道中提问。如果您正在 InfluxDB 之上开发一个很酷的物联网应用程序,我们很乐意了解它,所以请务必 分享您的故事!此外,请在评论区分享您的想法、疑虑或问题。我们很乐意获得您的反馈并帮助您解决遇到的任何问题!