Documentation

使用参数化的 Flux 查询

InfluxDB Cloud 支持 参数化的 Flux 查询,允许您使用 InfluxDB API 动态改变查询中的值。参数化查询使 Flux 查询更加可重用,也可以帮助防止注入攻击。

防止注入攻击

在执行包含不可信用户输入的Flux查询时,请使用参数化查询;例如,在Web或物联网应用程序中。有关安全性和查询参数化的更多信息,请参阅OWASP SQL Injection Prevention Cheat Sheet。虽然本指南是关于SQL的,但它包含有用的一般建议。

InfluxDB Cloud /api/v2/query API 端点 接受请求体中的 params 字段。 params 字段是一个 JSON 对象,包含键值对,键是参数名称,值是参数值。 例如:

"params": {
  "ex1": "foo",
  "ex2": "bar" 
}

InfluxDB Cloud 将 params JSON 对象插入到 Flux 查询中,作为一个名为 paramsFlux 记录。使用 点或括号表示法 访问 Flux 查询中 params 记录中的参数。例如,使用上面的示例 params JSON,以下查询

from(bucket: params.ex1)
    |> range(start: -1h)
    |> filter(fn: (r) => r._measurement == params.ex2)

将会执行为

from(bucket: "foo")
    |> range(start: -1h)
    |> filter(fn: (r) => r._measurement == "bar")

示例

要使用参数化查询,请执行以下操作:

  1. 创建你的Flux查询。使用 点或括号表示法 来引用 params 记录中的参数,以在查询时填充值。以下示例使用 params.mybucket 来定义桶名称。

    from(bucket: params.mybucket)
        |> range(start: -7d)
        |> limit(n:2)
    
  2. 使用 InfluxDB Cloud /api/v2/query API 终端来执行您的查询。 在请求体中提供以下内容:

    • query: 要执行的原始 Flux 查询
    • 参数: 包含查询中每个参数的键值对的JSON对象。

    例如:

    curl --request POST \
      'https://cloud2.influxdata.com/api/v2/query?orgID=<YourOrgID>' \
      --header 'authorization: Token <YourAuthToken>' \
      --header 'content-type: application/json' \
      --data '{
        "query":"from(bucket: params.mybucket) |> range(start: -7d) |> limit(n:2)",
        "params":{
          "mybucket":"telegraf"
          }
        }'
    

支持的参数数据类型

带参数的Flux查询支持 intfloatstring 数据类型。要将支持的数据类型转换为其他 Flux基本数据类型,请使用 Flux类型转换函数

例如,要使用参数化的持续时间值定义 range() 函数的 start 参数:

  1. 使用 duration() 函数将 param 值转换为持续时间:

    from(bucket:"example-bucket")
        |> range(start: duration(v: params.mystart))
        |> limit(n:2)
    
  2. 在您的查询请求主体的 param 字段中,将持续时间参数格式化为字符串:

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


Flux的未来

Flux 正在进入维护模式。您可以像现在一样继续使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看:

由TSM驱动的InfluxDB Cloud