TL;DR InfluxDB技术技巧:使用InfluxDB的参数化Flux查询

导航至

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

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

在最基本的示例中,我们将把一个桶名称作为参数传递给我们的参数化Flux查询。Flux脚本如下所示

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

Flux引擎将用我们想要查询的桶名称替换params.mybucket。我们通过在Flux查询请求的有效负载末尾指定"params":{"mybucket":"telegraf"}来指定mybucket参数的值,以查询"telegraf"桶。由于此查询必须通过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"}}'

这就是全部内容!现在您可以使用参数化查询来构建您的物联网应用程序,并帮助防止注入攻击。参数化查询还能让您轻松更新查询以反映新的桶、过滤器或时间戳,并鼓励代码复用。

参数化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之上开发酷炫的物联网应用程序,我们很乐意听到您的消息,所以请确保分享您的经历!此外,请在评论区分享您的想法、关注点或问题。我们很乐意收到您的反馈并帮助您解决遇到的问题!