开始查询数据
InfluxDB 支持多种不同的工具来查询数据,包括:
- InfluxDB 用户界面 (UI)
- InfluxDB HTTP API
influx命令行工具- Chronograf
- Grafana
- InfluxDB 客户端库
本教程将引导您了解在 InfluxDB 中查询数据的基本知识,并主要集中在您可以用来查询时间序列数据的两种语言上:
- Flux:一种功能性脚本语言,旨在查询和处理来自InfluxDB和其他数据源的数据。
- InfluxQL: 一种类似SQL的查询语言,旨在查询来自InfluxDB的时间序列数据。
本节教程中的示例查询了开始写数据部分中编写的数据。
在此页面上:
使用Flux查询数据
Flux是一种函数式脚本语言,让您能够查询和处理来自InfluxDB和其他数据源的数据。
这是写Flux查询的简要介绍。 若要获取更深入的介绍,请参见 Get started with Flux。
Flux 查询基础
在使用Flux查询InfluxDB时,您会使用三个主要函数:
from(): 从InfluxDB存储桶查询数据。
range(): 根据时间范围过滤数据。Flux需要“有限制”的查询——限制在特定时间范围内的查询。
filter(): 根据列值过滤数据。每一行由
r表示 而每一列由r的一个属性表示。 您可以应用多个后续筛选。要了解
from()如何将数据结构化为行和表格,以便从 InfluxDB 返回, 查看在开始写入 InfluxDB 时写入的数据。
管道转发运算符
Flux使用管道转发操作符 (|>) 将一个函数的输出作为下一个函数的输入。
查询示例数据
以下Flux查询返回存储在home测量中的co、hum和temp字段,时间戳介于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查询。
访问 cloud2.influxdata.com 在浏览器中登录并访问 InfluxDB 用户界面。
在左侧导航栏中,点击 数据探测器。
InfluxDB 数据探测器提供了两种使用 Flux 查询数据的选项:
- 查询构建器 (默认): 可视化查询构建器,允许您选择时间范围、 测量、标签和要查询的字段。
- Script Editor: 浏览器内的代码编辑器,用于编写和运行Flux脚本。
查询构建器
使用查询构建器构建并执行Flux查询:
在FROM列中,选择要查询的桶。对于本教程,选择get-started桶。
在下一个 filter 列中,从列下拉菜单中选择 _measurement,然后选择 home 测量。
(可选) 要查询特定字段或字段,在下一个 filter 列中,从列下拉菜单中选择 _field,然后选择要查询的字段。在本教程中,有三个字段: co, hum 和 temp。
(可选) 要通过特定标签值进行查询,在下一个 过滤器 列中,从下拉菜单中选择标签列,然后选择要过滤的标签值。在本教程中,唯一的标签列是 房间。
(可选) 在聚合函数面板中,选择一个聚合或选择器函数来下采样数据。默认的聚合函数是
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参数指定了结果中包括的最晚时间(不包括)。开始: 2022-01-01T08:00:00Z
停止: 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,其潜在值为: 客厅 或 厨房。
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")点击 提交 以使用选定的过滤器和操作执行查询并显示结果。
如果您还没有,请下载、安装并配置
influxCLI。使用
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查询数据,请向InfluxDB API /api/v2/query端点发送请求,使用POST请求方法。
POST http://localhost:8086/api/v2/query
请在您的请求中包含以下内容:
- 头部:
- 授权: 令牌 <INFLUX_TOKEN>
- 内容类型: application/vnd.flux
- 接受: application/csv
- (可选) 接受编码: 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 Cloud 中已被 桶 取代。 要在 InfluxDB Cloud 中使用 InfluxQL,首先 将数据库和保留策略 (DBRP) 的组合映射到 InfluxDB 桶。
InfluxQL 查询基础
当使用InfluxQL查询InfluxDB时,最基本的查询包括以下语句和子句:
SELECT: 指定要查询的字段和标签。FROM: 指定要查询的测量。 使用测量名称或包括数据库和保留策略的完全限定测量名称。例如:db.rp.measurement。WHERE: (可选) 根据字段、标签和时间过滤数据。
以下的 InfluxQL 查询返回co、hum 和temp 字段以及 在home 测量中存储的room 标签,时间戳介于 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 用户界面不支持 InfluxQL
InfluxDB Cloud 用户界面不提供使用 InfluxQL 查询数据的方式。对于构建和执行 InfluxQL 查询的用户界面,请考虑使用 Chronograf 或 Grafana 与 InfluxDB Cloud。
身份验证凭据
下面的示例假设您的 InfluxDB 主机、组织 和 令牌 是通过 活动 influx CLI 配置 或环境变量 (INFLUX_HOST、INFLUX_ORG 和 INFLUX_TOKEN) 提供的。如果您没有设置 CLI 配置或环境变量,请在每个命令中使用以下标志包含这些必需的凭据:
--host: InfluxDB 主机-o, --org或--org-id: InfluxDB 组织名称或 ID-t, --token: InfluxDB API 令牌
如果您还没有,请下载、安装并配置
influxCLI。使用
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 查询数据,请发送请求
到 InfluxDB API /query 1.X 兼容终端
使用 POST 请求方法。
POST http://localhost:8086/query
请在您的请求中包含以下内容:
标题:
- Authorization: Token <INFLUX_TOKEN>
- Accept: application/json
- (Optional) Accept-Encoding: gzip
查询参数:
db: 要查询的数据库。
rp: 查询数据的保留策略。
q: 要执行的InfluxQL查询。
epoch: (可选) 返回具有指定精度的 Unix 时间戳,而不是RFC3339 时间戳。以下精度可用:
ns- nanosecondsuorµ- microsecondsms- millisecondss- secondsm- minutesh- hours
请求体: 作为纯文本的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任务自动化查询。