InfluxDB查询数据,InfluxDB怎么查询数据
InfluxDB查询数据,InfluxDB怎么查询数据

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

  • InfluxDB用户界面(UI)
  • InfluxDB HTTP API
  • influx CLI
  • 时间格拉夫
  • Grafana
  • InfluxDB客户端库

本教程将向您介绍在InfluxDB中查询数据的基础知识,并 主要关注可用于查询时间序列数据的两种语言:

  • Flux:一种函数式脚本语言,用于查询和处理数据 InfluxDB和其他数据源。
  • InfluxQL:一种类似SQL的查询语言,旨在从 InfluxDB.

本教程这一节中的示例将从 开始编写数据节。

在此页面上:
  • 使用Flux查询数据
    • 通量查询基础
    • 执行Flux查询
  • 使用InfluxQL查询数据
    • InfluxQL查询基础
    • 执行InfluxQL查询

使用Flux查询数据

Flux是一种函数式脚本语言,允许您查询和处理数据 InfluxDB和其他数据源。

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

通量查询基础

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

  • from(): 查询InfluxDB存储桶中的数据。
  • function(): 根据时间范围过滤数据。Flux需要“有界”的查询-查询 限制在特定的时间范围内。
  • filter(): 根据列值筛选数据。每行由r表示 并且每一列由属性r表示。 您可以应用多个后续过滤器。
    要了解从InfluxDB返回时from()如何将数据结构化为行和表,请执行以下操作: 查看InfluxDB中写入的数据开始写入InfluxDB。
    了解有关filter()工作原理的更多信息

管道向前操作员

Flux使用pipe-forward操作符(|>)将一个函数的输出管道化为 输入下一个函数作为输入。

查询示例数据

下面的Flux查询返回存储在 时间戳在2022-01- 01 T08:00:00 Z和2022-01- 01 T20:00:01 Z之间的家庭测量。

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 UI、influx CLI或InfluxDB API执行Flux查询。

InfluxDB UI 流入CLI InfluxDB API

  1. 访问 本地主机:8086 在浏览器中登录并访问InfluxDB UI。

  2. 在左侧导航栏中,单击数据资源管理器。

    数据浏览器

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

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

    查询生成器

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

    1. 在FROM列中,选择要查询的存储桶。对于本教程, 选择入门存储桶。
    2. 在下一个筛选器列中,从 列下拉菜单,然后选择起始测量。
    3. (可选)要查询一个或多个特定字段,请在下一个筛选器中 列,从列下拉菜单中选择_field,然后 选择要查询的字段。在本教程中,有三个 字段:co、hum和temp。
    4. 要按特定标记值查询,请在下一个筛选器中 列,然后从列下拉菜单中选择标记列,然后 选择要过滤的标记值。在本教程中,标记仅 标记列是房间。
    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参数指定要查询的存储桶。 对于本教程,查询入门存储桶。

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

        • 开始时间:2022-01- 01 T08:00:00 Z
        • 停止:2022-01- 01 T20:00:01 Z
          注意停止时间增加了一秒。在Flux中,停止 时间是排他性的,并且将排除具有该时间戳的点。 通过增加一秒,查询将包括指向 2022-01-01 20:00:00.

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

      3. 使用filter()按初始测量过滤结果。

      4. (可选)使用filter()按特定字段筛选结果。 在本教程中,有三个字段:CO、Hum和Temp。

      5. (可选)使用filter()按特定 标记值。在本教程中,有一个标签,房间,有两个 潜在价值:客厅或厨房。

      from(bucket: 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. 单击“提交”以使用 选择过滤器和操作并显示结果。

通量查询结果

查看通量查询结果

使用InfluxQL查询数据

InfluxQL是一种类似SQL的查询语言,类似于大多数SQL语言,但 专为查询InfluxDB 0.x和1.x中的时间序列数据而设计。

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

因为InfluxQL是为InfluxDB的早期版本开发的,所以它依赖于 数据库和保留策略(DBRP),已由 InfluxDB 2.7中的buckets。 要在InfluxDB 2.7中使用InfluxQL,首先 将数据库和保留策略(DBRP)组合映射到InfluxDB存储桶。

InfluxQL查询基础

使用InfluxQL查询InfluxDB时,最基本的查询包括以下内容 声明和条款:

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

下面的InfluxQL查询返回co、hum和temp字段 存储在具有时间戳的家庭测量中的房间标签 在2022-01- 01 T08:00:00 Z和2022-01- 01 T20:00:00 Z之间。

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 CLI或InfluxDB API执行InfluxQL查询。

InfluxDB UI 流入CLI InfluxDB API

InflxuDB UI不支持InfluxQL

InfluxDB 2.7 UI不提供使用InfluxQL查询数据的方法。 对于构建和执行InfluxQL查询的用户界面,请考虑使用 计时腕表 Grafana with InfluxDB 2.7.

InfluxQL查询结果

查看InfluxQL查询结果

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

让我们继续讨论更高级的数据处理查询和自动化查询 InfluxDB任务

我的微信