文档文档

开始查询数据

InfluxDB 支持多种不同的工具来查询数据,包括

本教程将引导您了解在 InfluxDB 中查询数据的基础知识,并主要关注您可用于查询时序数据的两种语言

  • Flux:一种函数式脚本语言,旨在查询和处理来自 InfluxDB 和其他数据源的数据。
  • InfluxQL:一种类似 SQL 的查询语言,旨在查询来自 InfluxDB 的时序数据。

本教程此部分中的示例查询在 开始写入数据 部分中写入的数据。

本页内容

使用 Flux 查询数据

Flux 是一种函数式脚本语言,可让您查询和处理来自 InfluxDB 和其他数据源的数据。

这是编写 Flux 查询的简要介绍。有关更深入的介绍,请参阅Flux 入门

Flux 查询基础知识

使用 Flux 查询 InfluxDB 时,您可以使用三个主要函数

  • from():从 InfluxDB 存储桶查询数据。

  • range():根据时间范围过滤数据。Flux 需要“有界”查询——查询限制在特定时间范围内。

  • filter():根据列值过滤数据。每一行由 r 表示,每一列由 r 的属性表示。您可以应用多个后续过滤器。

    要查看 from() 在从 InfluxDB 返回时如何将数据结构化为行和表,请查看在 InfluxDB 写入入门中写入的数据

    了解有关 filter() 工作原理的更多信息

管道前向运算符

Flux 使用管道前向运算符 (|>) 将一个函数的输出作为下一个函数的输入管道传输。

查询示例数据

以下 Flux 查询返回 cohumtemp 字段,这些字段存储在 home 测量中,时间戳在 2022-01-01T08:00:00Z 和 2022-01-01T20:00:01Z 之间

from(bucket: "get-started")
    |> range(start: 2022-01-01T08:00:00Z, stop: 2022-01-01T20:00:01Z)
    |> filter(fn: (r) => r._measurement == "home")
    |> filter(fn: (r) => r._field== "co" or r._field == "hum" or r._field == "temp")

执行 Flux 查询

使用 InfluxDB UIinflux CLIInfluxDB API 执行 Flux 查询。

  1. 访问 localhost:8086

    在浏览器中登录并访问 InfluxDB UI。

  2. 在左侧导航栏中,单击 数据浏览器

  1. InfluxDB 数据浏览器提供两个使用 Flux 查询数据的选项

    • 查询构建器(默认):可视化查询构建器,可让您选择时间范围、测量、标签和要查询的字段。
    • 脚本编辑器:用于编写和运行 Flux 脚本的浏览器内代码编辑器。

    查询构建器

    要使用查询构建器构建和执行 Flux 查询:

    1. FROM 列中,选择要查询的存储桶。对于本教程,选择 get-started 存储桶。

    2. 在下一个 filter 列中,从列下拉菜单中选择 _measurement,然后选择 home 测量。

    3. (可选)要查询特定字段或多个字段,请在下一个 filter 列中,从列下拉菜单中选择 _field,然后选择要查询的字段。在本教程中,有三个字段:cohumtemp

    4. (可选)要按特定标签值查询,请在下一个 filter 列中,从列下拉菜单中选择标签列,然后选择要按其过滤的标签值。在本教程中,标签列仅为 room

    5. (可选)聚合函数 窗格中,选择一个聚合或选择器函数以用于对数据进行降采样。默认聚合函数为 mean

    6. 在时间范围下拉菜单中,选择 自定义时间范围,然后从日期选择器中选择以下日期

      • 开始: 2022-01-01 08:00:00

      • 停止: 2022-01-01 20:00:01

        请注意,停止时间增加了一秒。在 Flux 中,停止时间是排他的,将排除具有该时间戳的点。通过增加一秒,查询将包括到 2022-01-01 20:00:00 的所有点.

    7. 单击 提交 以执行带有选定过滤器和操作的查询,并显示结果。


    脚本编辑器

    要使用查询构建器编写和执行 Flux 查询:

    1. 在数据浏览器中,单击 脚本编辑器

    2. 在脚本编辑器文本字段中编写您的 Flux 查询。

      注意:您可以手动编写函数,也可以使用脚本编辑器右侧的函数列表来搜索和注入函数。

      1. 使用 from() 并使用 bucket 参数指定要查询的存储桶。对于本教程,查询 get-started 存储桶。

      2. 使用 range() 指定要查询的时间范围。start 参数定义结果中包含的最早时间。stop 参数指定结果中包含的最新时间(不包括在内)。

        • start:2022-01-01T08:00:00Z

        • stop:2022-01-01T20:00:01Z

          请注意,停止时间增加了一秒。在 Flux 中,停止时间是排他的,将排除具有该时间戳的点。通过增加一秒,查询将包括到 2022-01-01 20:00:00 的所有点.

        如果要使用在时间选择下拉菜单中选择的开始时间和停止时间,请使用 v.timeRangeStartv.timeRangeStop 作为 startstop 参数的值。

      3. 使用 filter()home 测量过滤结果。

      4. (可选)使用 filter() 按特定字段过滤结果。在本教程中,有三个字段:cohumtemp

      5. (可选)使用 filter() 按特定标签值过滤结果。在本教程中,有一个标签 room,具有两个可能的值:Living RoomKitchen

      from(bucket: "get-started")
          |> range(start: 2022-01-01T08:00:00Z, stop: 2022-01-01T20:00:01Z)
          |> filter(fn: (r) => r._measurement == "home")
          |> filter(fn: (r) => r._field== "co" or r._field == "hum" or r._field == "temp")
      
    3. 单击 提交 以执行带有选定过滤器和操作的查询,并显示结果。

  1. 如果尚未执行此操作,请下载、安装和配置 influx CLI

  2. 使用 influx query 命令使用 Flux 查询 InfluxDB。

    提供以下内容:

influx query '
from(bucket: "get-started")
    |> range(start: 2022-01-01T08:00:00Z, stop: 2022-01-01T20:00:01Z)
    |> filter(fn: (r) => r._measurement == "home")
    |> filter(fn: (r) => r._field== "co" or r._field == "hum" or r._field == "temp")
'

要使用 Flux 和 InfluxDB HTTP API 从 InfluxDB 查询数据,请使用 POST 请求方法向 InfluxDB API /api/v2/query 端点发送请求。

POST http://localhost:8086/api/v2/query

在您的请求中包含以下内容

  • 标头:
    • Authorization:Token <INFLUX_TOKEN>
    • Content-Type:application/vnd.flux
    • Accept:application/csv
    • (可选)Accept-Encoding:gzip
  • 查询参数:
    • org:InfluxDB 组织名称
  • 请求正文:纯文本格式的 Flux 查询

以下示例使用 cURL 和 InfluxDB API 使用 Flux 查询数据

curl --request POST \
"$INFLUX_HOST/api/v2/query?org=$INFLUX_ORG&bucket=get-started" \
  --header "Authorization: Token $INFLUX_TOKEN" \
  --header "Content-Type: application/vnd.flux" \
  --header "Accept: application/csv" \
  --data 'from(bucket: "get-started")
    |> range(start: 2022-01-01T08:00:00Z, stop: 2022-01-01T20:00:01Z)
    |> filter(fn: (r) => r._measurement == "home")
    |> filter(fn: (r) => r._field== "co" or r._field == "hum" or r._field == "temp")
  '

InfluxDB /api/v2/query 端点以带注释的 CSV 格式返回查询结果。

Flux 查询结果

查看 Flux 查询结果

使用 InfluxQL 查询数据

InfluxQL 是一种类似 SQL 的查询语言,与大多数 SQL 语言相似,但专门设计用于查询来自 InfluxDB 0.x 和 1.x 的时序数据。

将数据库和保留策略映射到存储桶

由于 InfluxQL 是为早期版本的 InfluxDB 开发的,因此它依赖于数据库和保留策略 (DBRP),这些策略已被 InfluxDB 2.7 中的存储桶取代。要将 InfluxQL 与 InfluxDB 2.7 一起使用,请首先将数据库和保留策略 (DBRP) 组合映射到 InfluxDB 存储桶

InfluxQL 查询基础知识

使用 InfluxQL 查询 InfluxDB 时,最基本的查询包括以下语句和子句

  • SELECT:指定要查询的字段和标签。
  • FROM:指定要查询的测量。使用测量名称或完全限定的测量名称,其中包括数据库和保留策略。例如:db.rp.measurement
  • WHERE(可选)根据字段、标签和时间过滤数据。

以下 InfluxQL 查询返回 cohumtemp 字段以及 room 标签,这些字段和标签存储在 home 测量中,时间戳在 2022-01-01T08:00:00Z 和 2022-01-01T20:00:00Z 之间

SELECT co,hum,temp,room FROM "get-started".autogen.home WHERE time >= '2022-01-01T08:00:00Z' AND time <= '2022-01-01T20:00:00Z'

这些只是 InfluxQL 语法的基础知识。有关更深入的信息,请参阅InfluxQL 文档

执行 InfluxQL 查询

使用 influx CLIInfluxDB API 执行 InfluxQL 查询。

influxdb UI 不支持 InfluxQL

InfluxDB 2.7 UI 不提供使用 InfluxQL 查询数据的方式。对于构建和执行 InfluxQL 查询的用户界面,请考虑将 ChronografGrafana 与 InfluxDB 2.7 结合使用。

身份验证凭据

以下示例假设您的 InfluxDB hostorganizationtoken 通过 活动的 influx CLI 配置 或环境变量(INFLUX_HOSTINFLUX_ORGINFLUX_TOKEN)提供。如果您没有设置 CLI 配置或环境变量,请为每个命令包含以下带有标志的必需凭据

  • --host: InfluxDB 主机
  • -o, --org--org-id: InfluxDB 组织名称或 ID
  • -t, --token: InfluxDB API 令牌
  1. 如果尚未执行此操作,请下载、安装和配置 influx CLI

  2. 使用 influx v1 shell 命令 启动 InfluxQL shell 并使用 InfluxQL 查询 InfluxDB。提供以下内容

    influx v1 shell
    
  3. 输入 InfluxQL 查询并按 Enter ↵

    SELECT co,hum,temp,room FROM "get-started".autogen.home WHERE time >= '2022-01-01T08:00:00Z' AND time <= '2022-01-01T20:00:00Z'
    

要使用 InfluxQL 和 InfluxDB HTTP API 从 InfluxDB 查询数据,请使用 POST 请求方法向 InfluxDB API /query 1.X 兼容性端点 发送请求。

POST http://localhost:8086/query

在您的请求中包含以下内容

  • 标头:

    • Authorization:Token <INFLUX_TOKEN>
    • Accept: application/json
    • (可选)Accept-Encoding:gzip
  • 查询参数:

    • db: 要查询的数据库。

    • rp: 从中查询数据的保留策略。

    • q: 要执行的 InfluxQL 查询。

    • epoch: (可选) 返回具有指定精度的 Unix 时间戳 而不是 RFC3339 时间戳 的结果。以下精度可用

      • ns - 纳秒
      • uµ - 微秒
      • ms - 毫秒
      • s - 秒
      • m - 分钟
      • h - 小时
  • 请求正文:纯文本格式的 Flux 查询

以下示例使用 cURL 和 InfluxDB API 通过 InfluxQL 查询数据

curl --get "$INFLUX_HOST/query?org=$INFLUX_ORG&bucket=get-started" \
  --header "Authorization: Token $INFLUX_TOKEN" \
  --data-urlencode "db=get-started" \
  --data-urlencode "rp=autogen" \
  --data-urlencode "q=SELECT co,hum,temp,room FROM home WHERE time >= '2022-01-01T08:00:00Z' AND time <= '2022-01-01T20:00:00Z'"

InfluxDB /write 1.x 兼容性端点以 JSON 格式返回查询结果。

InfluxQL 查询结果

查看 InfluxQL 查询结果

恭喜! 您已经学习了在 InfluxDB 中查询数据的基本知识。要深入了解查询 InfluxDB 的所有方式,请参阅文档的 在 InfluxDB 中查询数据 部分。

让我们继续进行更高级的数据处理查询以及使用 InfluxDB 任务自动化查询。


此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、只读副本、增强的安全性以及数据压缩,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看