InfluxQL 选择器函数
InfluxDB 3 Core 处于公开 Alpha 阶段
InfluxDB 3 Core 处于公开 alpha 阶段,可用于测试和反馈,但不适用于生产环境。产品和本文档均在持续改进中。我们欢迎并鼓励您提供关于 alpha 体验的反馈,并邀请您加入我们的公共频道以获取更新和分享反馈。
Alpha 阶段的预期和建议
- 在 alpha 阶段,我们可能会进行破坏性更改,这可能需要您删除数据并重新开始。如果您使用的数据很重要,请在其他地方保留备份副本。
- 在 alpha 阶段,我们在每次合并到 InfluxDB
main
分支时都会生成新的构建版本。更改频繁,相关更新会发布到我们的公共频道。
使用选择器函数来评估、选择和返回数据中的值。选择器函数为每个 InfluxQL 组返回一行或多行包含所选值的数据。
示例使用InfluxDB 快速入门教程中提供的示例数据集。
缺失的 InfluxQL 函数
一些 InfluxQL 函数正在重新架构中,以与 InfluxDB 3 存储引擎配合使用。如果您需要的函数不在此处,请查看 InfluxQL 功能支持页面 以获取更多信息。
BOTTOM()
返回最小的 N
个字段值。BOTTOM()
支持 int64 和 float64 字段值数据类型。
BOTTOM(field_expression[, tag_expression_1[, ..., tag_expression_n]], N)
注意:如果两个或多个最小值之间存在并列,BOTTOM()
会返回具有最早时间戳的字段值。
参数
- field_expression:用于标识要操作的字段的表达式。可以是字段键或常量。
- tag_expression:用于标识要按其分段的标签键的表达式。可以是标签键或常量。使用逗号分隔多个标签。
- N:从每个 InfluxQL 组或指定的标签段返回的结果数。
显著行为
示例
选择字段的底部三个值
SELECT BOTTOM(temp, 3) FROM home
time | bottom |
---|
2022-01-01T08:00:00Z | 21 |
2022-01-01T08:00:00Z | 21.1 |
2022-01-01T09:00:00Z | 21.4 |
选择两个唯一标签值的底部字段值
SELECT BOTTOM(temp, room, 2) FROM home
time | bottom | room |
---|
2022-01-01T08:00:00Z | 21 | Kitchen |
2022-01-01T08:00:00Z | 21.1 | Living Room |
选择底部三个字段值以及与每个值关联的标签值
SELECT BOTTOM(temp, 3), room FROM home
time | bottom | room |
---|
2022-01-01T08:00:00Z | 21 | Kitchen |
2022-01-01T08:00:00Z | 21.1 | Living Room |
2022-01-01T09:00:00Z | 21.4 | Living Room |
选择唯一标签值和时间窗口(按时间分组)的底部字段值
SELECT
BOTTOM(temp, room, 2)
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T12:00:00Z'
GROUP BY time(2h)
time | bottom | room |
---|
2022-01-01T08:00:00Z | 21 | Kitchen |
2022-01-01T08:00:00Z | 21.1 | Living Room |
2022-01-01T10:00:00Z | 21.8 | Living Room |
2022-01-01T11:00:00Z | 22.4 | Kitchen |
2022-01-01T12:00:00Z | 22.2 | Living Room |
2022-01-01T12:00:00Z | 22.5 | Kitchen |
请注意,当按时间分组时,BOTTOM()
保持数据点的原始时间戳。
FIRST()
返回具有最旧时间戳的字段值。
参数
- field_expression:用于标识要操作的一个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符 (
*
)。支持所有字段数据类型。
显著行为
示例
选择字段的第一个值
SELECT FIRST(temp) FROM home
time | first |
---|
2022-01-01T08:00:00Z | 21.1 |
从每个字段中选择第一个值
SELECT FIRST(*) FROM home
time | first_co | first_hum | first_temp |
---|
1970-01-01T00:00:00Z | 0 | 35.9 | 21.1 |
从与正则表达式匹配的字段键中选择第一个值
SELECT FIRST(/^[th]/) FROM home
time | first_hum | first_temp |
---|
1970-01-01T00:00:00Z | 35.9 | 21.1 |
在时间窗口内(按时间分组)从字段中选择第一个值
SELECT
FIRST(temp)
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY time(6h)
time | first |
---|
2022-01-01T06:00:00Z | 21 |
2022-01-01T12:00:00Z | 22.5 |
2022-01-01T18:00:00Z | 23.3 |
请注意,当按时间分组时,FIRST()
覆盖数据点的原始时间戳。
LAST()
返回具有最新时间戳的字段值。
参数
- field_expression:用于标识要操作的一个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符 (
*
)。支持所有字段数据类型。
显著行为
示例
选择字段的最后一个值
SELECT LAST(temp) FROM home
time | last |
---|
2022-01-01T20:00:00Z | 22.7 |
从每个字段中选择最后一个值
time | last_co | last_hum | last_temp |
---|
1970-01-01T00:00:00Z | 26 | 36.5 | 22.7 |
从与正则表达式匹配的字段键中选择最后一个值
SELECT LAST(/^[th]/) FROM home
time | last_hum | last_temp |
---|
1970-01-01T00:00:00Z | 36.5 | 22.7 |
在时间窗口内(按时间分组)从字段中选择最后一个值
SELECT
LAST(temp)
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY time(6h)
time | last |
---|
2022-01-01T06:00:00Z | 22.4 |
2022-01-01T12:00:00Z | 22.7 |
2022-01-01T18:00:00Z | 22.7 |
请注意,当按时间分组时,LAST()
覆盖数据点的原始时间戳。
MAX()
返回最大的字段值。
参数
- field_expression:用于标识要操作的一个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符 (
*
)。支持数值字段。
显著行为
示例
选择字段的最大值
time | max |
---|
2022-01-01T20:00:00Z | 26 |
从每个字段中选择最大值
time | max_co | max_hum | max_temp |
---|
1970-01-01T00:00:00Z | 26 | 36.9 | 23.3 |
从与正则表达式匹配的字段键中选择最大值
SELECT MAX(/^[th]/) FROM home
time | max_hum | max_temp |
---|
1970-01-01T00:00:00Z | 36.9 | 23.3 |
在时间窗口内(按时间分组)从字段中选择最大值
SELECT
MAX(temp)
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY time(6h)
time | max |
---|
2022-01-01T06:00:00Z | 23 |
2022-01-01T12:00:00Z | 22.8 |
2022-01-01T18:00:00Z | 23.3 |
请注意,当按时间分组时,MAX()
覆盖数据点的原始时间戳。
MIN()
返回最小的字段值。
参数
- field_expression:用于标识要操作的一个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符 (
*
)。支持数值字段。
显著行为
示例
选择字段的最小值
SELECT MIN(temp) FROM home
time | min |
---|
2022-01-01T08:00:00Z | 21 |
从每个字段中选择最小值
time | min_co | min_hum | min_temp |
---|
1970-01-01T00:00:00Z | 0 | 35.9 | 21 |
从与正则表达式匹配的字段键中选择最小值
SELECT MIN(/^[th]/) FROM home
time | min_hum | min_temp |
---|
1970-01-01T00:00:00Z | 35.9 | 21 |
在时间窗口内(按时间分组)从字段中选择最小值
SELECT
MIN(temp)
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY time(6h)
time | min |
---|
2022-01-01T06:00:00Z | 21 |
2022-01-01T12:00:00Z | 22.4 |
2022-01-01T18:00:00Z | 22.7 |
请注意,当按时间分组时,MIN()
覆盖数据点的原始时间戳。
PERCENTILE()
返回第 N
个百分位数字段值。
PERCENTILE(field_expression, N)
参数
- field_expression:用于标识要操作的一个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符 (
*
)。支持数值字段。 - N:要返回的百分位数。必须是大于 0 且小于或等于 100 的整数或浮点值。
显著行为
示例
从字段中选择第 50 个百分位数的值
SELECT PERCENTILE(temp, 50) FROM home
time | percentile |
---|
2022-01-01T11:00:00Z | 22.4 |
从每个字段中选择第 50 个百分位数的值
SELECT PERCENTILE(*, 50) FROM home
time | percentile_co | percentile_hum | percentile_temp |
---|
1970-01-01T00:00:00Z | 1 | 36 | 22.4 |
从与正则表达式匹配的字段键中选择第 50 个百分位数的值
SELECT PERCENTILE(/^[th]/, 50) FROM home
time | percentile_hum | percentile_temp |
---|
1970-01-01T00:00:00Z | 36 | 22.4 |
在时间窗口内(按时间分组)从字段中选择第 50 个百分位数的值
SELECT
PERCENTILE(temp, 50)
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY time(6h)
time | percentile |
---|
2022-01-01T06:00:00Z | 22.4 |
2022-01-01T12:00:00Z | 22.7 |
2022-01-01T18:00:00Z | 23.1 |
请注意,当按时间分组时,PERCENTILE()
覆盖数据点的原始时间戳。
TOP()
返回最大的 N
个字段值。TOP()
支持 int64 和 float64 字段值数据类型。
TOP(field_expression[, tag_expression_1[, ..., tag_expression_n]], N)
注意:如果两个或多个最大值之间存在并列,TOP()
会返回具有最早时间戳的字段值。
参数
- field_expression:用于标识要操作的字段的表达式。可以是字段键或常量。
- tag_expression:用于标识要按其分段的标签键的表达式。可以是标签键或常量。使用逗号分隔多个标签。
- N:从每个 InfluxQL 组或指定的标签段返回的结果数。
显著行为
示例
选择字段的顶部三个值
SELECT TOP(temp, 3) FROM home
time | top |
---|
2022-01-01T09:00:00Z | 23 |
2022-01-01T18:00:00Z | 23.3 |
2022-01-01T19:00:00Z | 23.1 |
选择两个唯一标签值的顶部字段值
SELECT TOP(temp, room, 2) FROM home
time | top | room |
---|
2022-01-01T18:00:00Z | 23.3 | Kitchen |
2022-01-01T18:00:00Z | 22.8 | Living Room |
选择顶部三个字段值以及与每个值关联的标签值
SELECT TOP(temp, 3), room FROM home
time | top | room |
---|
2022-01-01T09:00:00Z | 23 | Kitchen |
2022-01-01T18:00:00Z | 23.3 | Kitchen |
2022-01-01T19:00:00Z | 23.1 | Kitchen |
选择唯一标签值和时间窗口(按时间分组)的顶部字段值
SELECT
TOP(temp, room, 2)
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T12:00:00Z'
GROUP BY time(2h)
time | top | room |
---|
2022-01-01T09:00:00Z | 23 | Kitchen |
2022-01-01T09:00:00Z | 21.4 | Living Room |
2022-01-01T10:00:00Z | 22.7 | Kitchen |
2022-01-01T11:00:00Z | 22.2 | Living Room |
2022-01-01T12:00:00Z | 22.5 | Kitchen |
2022-01-01T12:00:00Z | 22.2 | Living Room |
请注意,当按时间分组时,TOP()
保持数据点的原始时间戳。
选择器函数的显著行为
按时间分组时的时间戳
当将选择器函数与 GROUP BY time()
子句一起使用时,大多数选择器函数会返回每个时间间隔的起始边界的时间戳。但是,具有指定每个组要返回的结果数量的 N
参数的函数会保持每个返回数据点的原始时间戳。
选择器函数可能会返回少于预期的数据点
使用以下带有 N
参数的选择器函数的查询可能会返回少于预期的数据点。
如果 InfluxQL 组或指定的标签键包含 X
个数据点或唯一标签值,并且 X
小于 N
,则该函数将为每个组或标签值返回 X
个结果而不是 N
个。
查看 FN(field_key, N)
的示例
以下示例选择 2022-01-01T08:00:00Z 和 2022-01-01T10:00:00Z 之间 Kitchen 的底部 5 个温度。在查询的时间范围内,Kitchen 仅记录了 3 个数据点,因此查询返回 3 个数据点而不是 5 个。
SELECT BOTTOM(temp, 5)
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T10:00:00Z'
AND room = 'Kitchen'
time | bottom |
---|
2022-01-01T08:00:00Z | 21 |
2022-01-01T09:00:00Z | 23 |
2022-01-01T10:00:00Z | 22.7 |
查看 FN(field_key, tag_key, N)
的示例
以下示例从 room
标签的 3 个唯一值中选择顶部温度。但是,room
标签只有 2 个唯一值,因此结果仅包含 2 个值。
SELECT TOP(temp, room, 3) FROM home
time | top | room |
---|
2022-01-01T18:00:00Z | 23.3 | Kitchen |
2022-01-01T18:00:00Z | 22.8 | Living Room |
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 3 Core 和本文档的反馈和错误报告。要寻求支持,请使用以下资源
拥有年度或支持合同的客户可以联系 InfluxData 支持。