Documentation

使用InfluxDB JavaScript客户端库查询

在Node.js环境中使用InfluxDB JavaScript客户端库查询InfluxDB。

以下示例向 InfluxDB 存储桶发送 Flux 查询,并输出可观察表中的行。

开始之前

查询 InfluxDB

  1. 更改为您的新项目目录并为您的查询模块创建一个文件。

    cd influx-node-app && touch query.js
    
  2. 实例化一个 InfluxDB 客户端。提供您的 InfluxDB URL 和 API 令牌。使用客户端的 getQueryApi() 方法。提供您的 InfluxDB 组织 ID 以创建一个配置好的 查询客户端

    import { InfluxDB, Point } from '@influxdata/influxdb-client'
    
    const queryApi = new InfluxDB({YOUR_URL, YOUR_API_TOKEN}).getQueryApi(YOUR_ORG)
    

    替换以下内容:

    • YOUR_URL: InfluxDB URL
    • YOUR_API_TOKEN: InfluxDB API 令牌
    • YOUR_ORG: InfluxDB 组织 ID
  3. 为你的 InfluxDB 存储桶创建一个 Flux 查询。将查询存储为字符串变量。

    为了防止 SQL 注入攻击,避免将不安全的用户输入与查询连接。

    const fluxQuery =
      'from(bucket: "YOUR_BUCKET")
        |> range(start: 0)
        |> filter(fn: (r) => r._measurement == "temperature")'
    

    YOUR_BUCKET 替换为您的 InfluxDB 桶的名称。

  4. 使用查询客户端的 queryRows() 方法查询 InfluxDB。 queryRows() 接受一个 Flux 查询和一个 RxJS Observer 对象。 客户端返回 table 元数据和作为 RxJS Observable 的行。 queryRows() 将您的观察者订阅到可观察对象。 最后,观察者将响应中的行记录到终端。

    const observer = {
      next(row, tableMeta) {
        const o = tableMeta.toObject(row)
        console.log(
          `${o._time} ${o._measurement} in '${o.location}' (${o.sensor_id}): ${o._field}=${o._value}`
        )
      }
    }
    
    queryApi.queryRows(fluxQuery, observer)
    

完整示例

'use strict'
/** @module query 
 * Queries a data point in InfluxDB using the Javascript client library with Node.js.
**/

import { InfluxDB, Point } from '@influxdata/influxdb-client'

/** Environment variables **/
const url = process.env.INFLUX_URL || ''
const token = process.env.INFLUX_TOKEN
const org = process.env.INFLUX_ORG || ''

/**
 * Instantiate the InfluxDB client
 * with a configuration object.
 *
 * Get a query client configured for your org.
 **/
const queryApi = new InfluxDB({url, token}).getQueryApi(org)

/** To avoid SQL injection, use a string literal for the query. */
const fluxQuery = 'from(bucket:"air_sensor") |> range(start: 0) |> filter(fn: (r) => r._measurement == "temperature")'

const myQuery = async () => {
  for await (const {values, tableMeta} of queryApi.iterateRows(fluxQuery)) {
    const o = tableMeta.toObject(values)
    console.log(
      `${o._time} ${o._measurement} in '${o.location}' (${o.sensor_id}): ${o._field}=${o._value}`
    )
  }
}

/** Execute a query and receive line table metadata and rows. */
myQuery()

要从文件中运行示例,设置您的 InfluxDB 环境变量并使用 node 来执行 JavaScript 文件。

export INFLUX_URL=http://localhost:8086 && \
export INFLUX_TOKEN=YOUR_API_TOKEN && \
export INFLUX_ORG=YOUR_ORG && \
node query.js

有关更多示例和信息,请参见JavaScript client on GitHub



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