开始查询数据
InfluxDB 支持多种不同的工具来查询数据,包括
- InfluxDB 用户界面 (UI)
- InfluxDB HTTP API
influx
CLI- Chronograf
- Grafana
- 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 写入入门中写入的数据。
管道前向运算符
Flux 使用管道前向运算符 (|>
) 将一个函数的输出作为下一个函数的输入管道传输。
查询示例数据
以下 Flux 查询返回 co、hum 和 temp 字段,这些字段存储在 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 UI、influx
CLI 或 InfluxDB API 执行 Flux 查询。
在浏览器中登录并访问 InfluxDB UI。
在左侧导航栏中,单击 数据浏览器。
InfluxDB 数据浏览器提供两个使用 Flux 查询数据的选项
查询构建器
要使用查询构建器构建和执行 Flux 查询:
在 FROM 列中,选择要查询的存储桶。对于本教程,选择 get-started 存储桶。
在下一个 filter 列中,从列下拉菜单中选择 _measurement,然后选择 home 测量。
(可选)要查询特定字段或多个字段,请在下一个 filter 列中,从列下拉菜单中选择 _field,然后选择要查询的字段。在本教程中,有三个字段:co、hum 和 temp。
(可选)要按特定标签值查询,请在下一个 filter 列中,从列下拉菜单中选择标签列,然后选择要按其过滤的标签值。在本教程中,标签列仅为 room。
(可选)在 聚合函数 窗格中,选择一个聚合或选择器函数以用于对数据进行降采样。默认聚合函数为
mean
。在时间范围下拉菜单中,选择 自定义时间范围,然后从日期选择器中选择以下日期
开始: 2022-01-01 08:00:00
停止: 2022-01-01 20:00:01
请注意,停止时间增加了一秒。在 Flux 中,停止时间是排他的,将排除具有该时间戳的点。通过增加一秒,查询将包括到 2022-01-01 20:00:00 的所有点.
单击 提交 以执行带有选定过滤器和操作的查询,并显示结果。
脚本编辑器
要使用查询构建器编写和执行 Flux 查询:
在数据浏览器中,单击 脚本编辑器。
在脚本编辑器文本字段中编写您的 Flux 查询。
注意:您可以手动编写函数,也可以使用脚本编辑器右侧的函数列表来搜索和注入函数。
使用
from()
并使用bucket
参数指定要查询的存储桶。对于本教程,查询 get-started 存储桶。使用
range()
指定要查询的时间范围。start
参数定义结果中包含的最早时间。stop
参数指定结果中包含的最新时间(不包括在内)。start:2022-01-01T08:00:00Z
stop:2022-01-01T20:00:01Z
请注意,停止时间增加了一秒。在 Flux 中,停止时间是排他的,将排除具有该时间戳的点。通过增加一秒,查询将包括到 2022-01-01 20:00:00 的所有点.
如果要使用在时间选择下拉菜单中选择的开始时间和停止时间,请使用
v.timeRangeStart
和v.timeRangeStop
作为start
和stop
参数的值。使用
filter()
按 home 测量过滤结果。(可选)使用
filter()
按特定字段过滤结果。在本教程中,有三个字段:co、hum 和 temp。(可选)使用
filter()
按特定标签值过滤结果。在本教程中,有一个标签 room,具有两个可能的值:Living Room 或 Kitchen。
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")
单击 提交 以执行带有选定过滤器和操作的查询,并显示结果。
如果尚未执行此操作,请下载、安装和配置
influx
CLI。使用
influx query
命令使用 Flux 查询 InfluxDB。提供以下内容:
- 字符串编码的 Flux 查询。
- 连接和身份验证凭据
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 查询结果
使用 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 查询返回 co、hum 和 temp 字段以及 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
CLI 或 InfluxDB API 执行 InfluxQL 查询。
influxdb UI 不支持 InfluxQL
InfluxDB 2.7 UI 不提供使用 InfluxQL 查询数据的方式。对于构建和执行 InfluxQL 查询的用户界面,请考虑将 Chronograf 或 Grafana 与 InfluxDB 2.7 结合使用。
身份验证凭据
以下示例假设您的 InfluxDB host、organization 和 token 通过 活动的 influx
CLI 配置 或环境变量(INFLUX_HOST
、INFLUX_ORG
和 INFLUX_TOKEN
)提供。如果您没有设置 CLI 配置或环境变量,请为每个命令包含以下带有标志的必需凭据
--host
: InfluxDB 主机-o, --org
或--org-id
: InfluxDB 组织名称或 ID-t, --token
: InfluxDB API 令牌
如果尚未执行此操作,请下载、安装和配置
influx
CLI。使用
influx v1 shell
命令 启动 InfluxQL shell 并使用 InfluxQL 查询 InfluxDB。提供以下内容influx v1 shell
输入 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 查询结果
恭喜! 您已经学习了在 InfluxDB 中查询数据的基本知识。要深入了解查询 InfluxDB 的所有方式,请参阅文档的 在 InfluxDB 中查询数据 部分。
让我们继续进行更高级的数据处理查询以及使用 InfluxDB 任务自动化查询。
此页面是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 和本文档的反馈和错误报告。要获得支持,请使用以下资源
拥有年度合同或支持合同的客户 可以联系 InfluxData 支持。