常见问题
账户管理
InfluxDB服务健康状态
安全
管理
- 我该如何识别我的 InfluxDB 版本?
- 我如何在InfluxDB中识别我使用的Flux版本?
- 我在哪里可以找到InfluxDB日志?
- 分片组持续时间和保留期之间有什么关系?
- 为什么在我更新存储桶的保留期限后数据没有被删除?
数据类型
写入数据
- 我该如何写整数和无符号整数字段值?
- InfluxDB如何处理重复点?
- InfluxDB写入API需要什么换行符?
- 在写数据时,何时应该使用单引号,何时应该使用双引号?
- 时间戳的精度重要吗?
- 编写稀疏历史数据的配置建议和模式指南是什么?
查询数据
- Flux
- InfluxQL
- 我如何在 InfluxDB v2.x 中使用 InfluxQL?
- 我如何在 InfluxQL 函数中执行数学运算?
- 为什么我的查询返回 epoch 0 作为时间戳?
- 哪些 InfluxQL 函数支持嵌套?
- 是什么决定了
GROUP BY time()查询返回的时间间隔? - 为什么我的查询没有返回数据或只返回部分数据?
- 为什么我的
GROUP BY time()查询没有返回发生在now()之后的时间戳? - 我可以对时间戳执行数学运算吗?
- 我可以从返回的时间戳中识别写入精度吗?
- 在查询中什么时候应使用单引号而不是双引号?
- 为什么我带有
WHERE OR时间子句的查询返回空结果? - 为什么
fill(previous)返回空结果? - 我如何查询具有相同标签键和字段键的数据?
- 我如何跨度量查询数据?
- 查询中时间戳的顺序重要吗?
- 我如何通过具有 null 值的标签查询数据?
删除数据
InfluxDB 任务
序列及序列基数
账户管理
我该如何重置我的密码?
使用influx CLI和influx user password命令来更新用户的密码。有关更多信息,请参见更改您的密码。
InfluxDB服务健康
我在哪里可以查看我的InfluxDB实例的当前状态?
InfluxDB 2.7 提供了不同的方法来监控其状态:
/healthAPI 端点 返回一个 JSON 主体,其中包含您 InfluxDB 实例当前状态的摘要。
该
/metricsAPI端点提供内部 InfluxDB指标,以Prometheus展示格式。使用Telegraf, InfluxDB爬虫或Fluxprometheus.scrape()函数 来抓取这些指标并将其存储在InfluxDB中,您可以监控并 对任何异常发出警报。您还可以使用InfluxDB Open Source (OSS) Metrics template快速设置InfluxDB OSS监控。
有关更多信息,请参阅 Monitor InfluxDB OSS using a template
安全
有什么不同类型的API令牌?
InfluxDB 2.7 支持以下令牌类型:
- 操作符标记
- 所有访问令牌
- 读/写令牌
有关每种令牌类型的更多信息,请参见 管理 API 令牌。
我可以在禁用身份验证的情况下使用InfluxDB吗?
InfluxDB 2.7 强制执行安全最佳实践,要求API请求进行身份验证。身份验证无法禁用。
管理
我如何识别我的InfluxDB版本?
使用以下任一方法来识别您正在使用的 InfluxDB OSS 版本:
使用 InfluxDB 用户界面:
- On the user login page
- In the right column of the main landing page
使用
influxd version命令$ influxd version InfluxDB 2.7.11 (git: x0x000xx0x) build_date: YYYY-MM-DDThh:mm:ssZ使用
/healthAPI 接口.以下示例使用
jq处理从/healthAPI 端点返回的 JSON 内容,并提取 InfluxDB 版本。您不必使用jq处理 JSON。有关/health端点返回的 JSON 示例,请参见 查看示例健康摘要。$ curl -s http://localhost:8086/health | jq -r '.version' 2.7.11
我如何识别我在InfluxDB中使用的Flux版本?
有关与官方 InfluxDB 发行版捆绑的 Flux 版本的信息,请参阅 Flux versions in InfluxDB。
如果使用自定义构建,请使用以下查询返回正在使用的Flux当前版本:
import "array"
import "runtime"
array.from(rows: [{version: runtime.version()}])
有关更多信息,请参阅 查询Flux版本。
我在哪里可以找到 InfluxDB 日志?
所有 InfluxDB 日志由 influxd 服务输出。要将日志存储到文件中,可以将 influxd 的输出通过管道重定向到一个文件。例如:
influxd 2>~/path/to/influxd-errors.log
分片组持续时间与保留期之间的关系是什么?
InfluxDB 桶以分片组的形式存储数据。 单个分片组覆盖特定的时间间隔。 InfluxDB 通过使用桶的保留期来确定该时间间隔。 下表概述了桶保留期与分片组时间间隔之间的默认关系:
| 存储桶保留期 | 默认分片组持续时间 |
|---|---|
| 少于2天 | 1小时 |
| 在2天和6个月之间 | 1d |
| 大于6个月 | 7d |
有关更多信息,请参见 InfluxDB Shards and shard groups。
为什么在我更新存储桶的保留期限后数据没有被删除?
以下是数据在更新存储桶的保留期限后可能不会立即被删除的原因:
保留强制服务每30分钟运行一次(默认)。您可能需要等待下一个保留强制周期运行。
InfluxDB 删除的是分片组,而不是单个数据点。 分片组覆盖在创建时分配给该分片组的特定时间间隔。 只有当分片组覆盖的整个时间范围超出桶的保留期时,保留服务才会删除分片组。
如果桶的新保留期少于旧分片组的持续时间,并且InfluxDB当前正在向旧的、更长的分片组写入数据,则保留服务不会在其分配的时间间隔完全过期之前删除旧分片组。
有关更多信息,请参阅 数据保留。
数据类型
InfluxDB 能够存储的最小和最大整数是多少?
InfluxDB将所有整数存储为有符号的64位整数。
最小整数: -9223372036854775808
最大整数: 9223372036854775807
接近但在这些限制内的值可能会导致意外行为。某些查询操作将64位整数转换为64位浮点值,这可能会导致溢出问题。
InfluxDB 能够存储的最小和最大时间戳是什么?
InfluxDB使用64位整数表示Unix纳秒时间戳。
最小时间戳: -9223372036854775806 或 1677-09-21T00:12:43.145224194Z
最大时间戳: 9223372036854775806 或 2262-04-11T23:47:16.854775806Z
超出该范围的时间戳会返回解析错误。
我可以更改字段的数据类型吗?
Flux 类型转换函数 让你在查询时改变字段的数据类型。然而,你不能改变磁盘上字段的类型。以下是一些可能的解决方法:
将一个字段复制到一个新的字段,并作为不同的类型。 下面的例子执行以下操作:
- Queries the
example-string-field. - Converts field values to booleans.
- Changes the field name to
example-boolean-field. - Writes the new field to the source bucket.
from(bucket: "example-bucket") |> range(start: -30d) |> filter(fn: (r) => r._measurement == "exampled-measurement") |> filter(fn: (r) => r._field == "example-string-field") |> toBool() |> set(key: "_field", value: "example-boolean-field") |> to(bucket: "example-bucket")- Queries the
将字段复制到一个新的桶中,并作为不同的类型。 下面的示例执行以下操作:
- Queries the
example-int-fieldfrom theexample-bucket-1bucket. - Converts field values to float values.
- Changes the field name to
example-float-field. - Writes the new field to the
example-bucket-2bucket.
from(bucket: "example-bucket-1") |> range(start: -30d) |> filter(fn: (r) => r._measurement == "exampled-measurement") |> filter(fn: (r) => r._field == "example-int-field") |> toFloat() |> set(key: "_field", value: "example-float-field") |> to(bucket: "example-bucket-2")- Queries the
InfluxDB 如何处理跨分片的字段类型不一致问题?
字段值可以是浮点数、整数、字符串或布尔值。 字段值类型在一个分片内不能不同,但在不同分片之间可以不同。
如果所有值具有相同类型,SELECT 语句 将返回所有字段值。 如果字段值类型在分片之间不同,InfluxDB 首先执行任何适用的 cast 操作,然后返回以下列表中首次出现的类型的所有值:浮点数、整数、字符串、布尔值。
如果您的数据字段值类型存在差异,使用语法
<field_key>::<type> 查询不同的数据类型。
示例
测量 just_my_type 具有一个名为 my_field 的字段。 my_field 在四个不同的分片中有四个字段值,并且每个值都有不同的数据类型(浮动、整数、字符串和布尔值)。
SELECT * 仅返回浮点数和整数字段值。注意,InfluxDB 在响应中将整数值转换为浮点数。
SELECT * FROM just_my_type
name: just_my_type
------------------
time my_field
2016-06-03T15:45:00Z 9.87034
2016-06-03T16:45:00Z 7
SELECT <field_key>::<type> [...] 返回所有值类型。
InfluxDB 将每个值类型输出到其自己的列中,并递增列名。
如果可能,InfluxDB 会将字段值转换为另一种类型;
它将整数 7 在第一列转换为浮点数,并且它
将浮点数 9.879034 在第二列转换为整数。
InfluxDB 不能将浮点数或整数转换为字符串或布尔值。
SELECT "my_field"::float,"my_field"::integer,"my_field"::string,"my_field"::boolean FROM just_my_type
name: just_my_type
------------------
time my_field my_field_1 my_field_2 my_field_3
2016-06-03T15:45:00Z 9.87034 9
2016-06-03T16:45:00Z 7 7
2016-06-03T17:45:00Z a string
2016-06-03T18:45:00Z true
SHOW FIELD KEYS 返回与字段键相关的每种数据类型,跨越每个分片。
示例
测量 just_my_type 只有一个字段,叫做 my_field。
my_field 在四个不同的分片中有四个字段值,每个值都有
不同的数据类型(浮点数、整数、字符串和布尔值)。
SHOW FIELD KEYS 返回所有四种数据类型:
> SHOW FIELD KEYS
name: just_my_type
fieldKey fieldType
-------- ---------
my_field float
my_field string
my_field integer
my_field boolean
写入数据
我如何编写整数和无符号整数字段值?
在行协议中,用尾随的 i 来标识 整数,用尾随的 u 来标识 无符号整数。没有这些,数值字段值将被解析为浮点数。
# Integer
value=100i
# Unsigned integer
value=100u
# Float
value=100
InfluxDB 如何处理重复数据点?
InfluxDB 通过其 测量、标签集 和 时间戳 唯一标识一个点。如果您提交一个与现有点相同的测量、标签集和时间戳的新点,InfluxDB 会将旧字段与新字段集联合,任何冲突都归入新字段集。
有关更多信息,请参见 处理重复数据点。
InfluxDB 写入 API 需要什么换行符?
InfluxDB 行协议依赖于换行符 (\n, 这是 ASCII 0x0A) 来指示一行的结束和新一行的开始。 使用换行符以外的字符的文件或数据将导致类似于 bad timestamp 或 unable to parse 的错误。
Windows 换行符
Windows使用回车和换行(\r\n)作为换行符,如果你在Windows机器上手动编写行协议,则会导致错误。在将行协议提交给InfluxDB写入API之前,请去掉任何回车(\r)。
我什么时候应该使用单引号,什么时候应该使用双引号来写数据?
行协议引用使用指南详见 行协议文档。
时间戳的精度重要吗?
是的。时间戳精度会影响数据摄取性能。 时间戳越精确,写入数据点所需的时间就越长。 为了最大化性能,写入数据到 InfluxDB 时,请使用尽可能粗糙的时间戳精度。然而,如果过于粗糙,你可能会冒险以相同的时间戳写入来自同一系列的数据点,这将被视为 重复点。
编写稀疏历史数据的配置建议和模式指南是什么?
对于稀疏的历史数据,我们推荐:
在您写入历史数据的桶上使用更长的 分片组持续时间。 历史分片组持续时间可以并且应该覆盖数年。 如果您的历史数据跨越多年,但您桶的分片组持续时间为1周,InfluxDB将创建许多分片,负面影响整体性能。
在摄取历史数据时暂时降低
storage-cache-snapshot-write-cold-duration配置设置 。默认设置 (10m) 可能会导致系统缓存每个分片的所有数据。 在写入历史数据时暂时将storage-cache-snapshot-write-cold-duration设置为10s会使过程更加高效。
查询数据
通量
我如何将字段构造成列(像 InfluxQL 一样)?
A SELECT 语句在 InfluxQL 中返回每个查询的标签和字段的列的数据。 Flux from() 函数返回包含每个标签的列以及一个 _field 列的数据,该列包含字段键。每个字段被分组到不同的表中。
要将每个字段结构化为列,可以使用pivot()或schema.fieldsAsCols()。
exampleData
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
import "influxdata/influxdb/schema"
exampleData
|> schema.fieldsAsCols()
from()返回的示例数据
| 测量 | 传感器 ID | 位置 | 字段 | 时间 | 值 |
|---|---|---|---|---|---|
| 机器 | abc123 | 站点20 | 温度 | 2022-01-01T00:00:00Z | 150.1 |
| 机器 | abc123 | 站20 | 温度 | 2022-01-01T00:00:10Z | 152.8 |
| 机器 | abc123 | 站20 | 温度 | 2022-01-01T00:00:20Z | 153.3 |
| 测量 | 传感器ID | 位置 | 字段 | 时间 | 值 |
|---|---|---|---|---|---|
| 机器 | abc123 | 站20 | 流 | 2022-01-01T00:00:00Z | 12.2 |
| 机器 | abc123 | 站20 | 流 | 2022-01-01T00:00:10Z | 14.9 |
| 机器 | abc123 | 站20 | 流 | 2022-01-01T00:00:20Z | 16.1 |
示例透视数据
| _测量 | 传感器ID | 位置 | _时间 | 温度 | 流量 |
|---|---|---|---|---|---|
| 机器 | abc123 | 站点20 | 2022-01-01T00:00:00Z | 150.1 | 12.2 |
| 机器 | abc123 | 站台20 | 2022-01-01T00:00:10Z | 152.8 | 14.9 |
| 机器 | abc123 | 站点20 | 2022-01-01T00:00:20Z | 153.3 | 16.1 |
如何从多个字段值推导出一个状态?
要比较多个字段的值并推导出一个状态:
查询导出一个状态所需的所有字段。
使用
pivot()或schema.fieldsAsCols()将字段转换为列。使用
map()遍历每一行输入,并根据字段列中的值分配新的列值。map() 的
fn参数定义了一个为每个输入行输出记录的函数。使用条件逻辑来分配状态。
from(bucket: "example-bucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "example-measurement")
|> filter(fn: (r) => r._field == "field1" or r._field == "field2")
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> map(
fn: (r) =>
({r with state:
if r.field1 > 90 and r.field2 < 10 then
"critical"
else if r.field1 > 70 and r.field2 < 30 then
"warning"
else if r.field1 > 40 and r.field2 < 60 then
"info"
else
"ok",
}),
)
InfluxQL
我如何在InfluxDB v2.x中使用InfluxQL?
使用 InfluxQL 与 InfluxDB 2.7 是通过 1.x 兼容 API 实现的,该 API 复制了 InfluxDB 1.x 的 /query 端点。这允许所有与 InfluxDB 1.x 兼容的客户端与 InfluxDB 2.7 一起工作。然而,InfluxQL 依赖于一个数据库和保留策略数据模型,这在 InfluxDB 2.7 中并不存在,但已被 桶 替代。
InfluxDB 2.7 让您将 InfluxQL 中使用的唯一数据库和保留策略组合映射到特定的桶,使用 DBRP 映射。
有关使用InfluxQL与InfluxDB 2.7 以及配置DBRP映射的详细说明,请参见 使用InfluxQL查询。
我如何在InfluxQL函数中执行数学运算?
InfluxQL不支持在函数内进行数学运算。 使用子查询来执行 数学计算。
例如,InfluxQL 不支持以下语法:
SELECT MEAN("dogs" - "cats") from "pet_daycare"
相反,使用子查询来获得相同的结果:
SELECT MEAN("difference") FROM (SELECT "dogs" - "cat" AS "difference" FROM "pet_daycare")
为什么我的查询返回 epoch 0 作为时间戳?
在 InfluxQL 中,epoch 0 (1970-01-01T00:00:00Z) 通常用作空时间戳的等价物。
如果您请求一个没有时间戳返回的查询,例如一个具有无限时间范围的聚合
函数,InfluxDB 将返回 epoch 0 作为时间戳。
哪些 InfluxQL 函数支持嵌套?
以下 InfluxQL 函数支持嵌套:
COUNT()与DISTINCT()CUMULATIVE_SUM()DERIVATIVE()DIFFERENCE()ELAPSED()MOVING_AVERAGE()NON_NEGATIVE_DERIVATIVE()HOLT_WINTERS()和HOLT_WINTERS_WITH_FIT()
有关如何使用子查询作为嵌套函数的替代品的信息,请参见 InfluxQL 数据探索。
是什么决定了GROUP BY time() 查询返回的时间间隔?
由 GROUP BY time() 查询返回的时间间隔符合 InfluxDB 数据库的预设时间窗口或用户指定的 offset interval。
预设时间窗口
例如,以下查询计算了在6:15pm和7:45pm之间的sunflowers的平均值,并将这些平均值分组为一小时的区间:
SELECT mean("sunflowers")
FROM "flower_orders"
WHERE time >= '2016-08-29T18:15:00Z' AND time <= '2016-08-29T19:45:00Z' GROUP BY time(1h)
InfluxQL 使用 GROUP BY time() 子句中指定的持续时间根据时间对数据进行分区。预设的时间窗口边界落在指定的持续时间单位上。
例如:
| 按时间()分组持续时间 | 结果窗口边界 |
|---|---|
| 1秒 | 00:00:00 - 00:00:01, 00:00:01 - 00:00:02, 等等。 |
| 1分钟 | 00:00:00 - 00:01:00, 00:01:00 - 00:02:00, 等等。 |
| 5分钟 | 00:00:00 - 00:05:00, 00:05:00 - 00:10:00, 等等。 |
| 1小时 | 00:00:00 - 01:00:00, 01:00:00 - 02:00:00, 等等。 |
虽然窗口边界可能超出查询的时间范围,但仅在查询的时间范围内的点被用于每个窗口的计算。
偏移时间窗口
作为另一个示例,以下查询计算了在下午6:15到下午7:45之间的sunflowers的平均值,并将这些平均值分组为一个小时的间隔。它将InfluxDB数据库的预设时间窗口偏移了15分钟。
SELECT mean("sunflowers")
FROM "flower_orders"
WHERE time >= '2016-08-29T18:15:00Z' AND time <= '2016-08-29T19:45:00Z' GROUP BY time(1h,15m)
---
|
offset interval
InfluxQL使用GROUP BY time()子句中指定的持续时间和偏移量根据时间对数据进行分区。时间边界从指定的偏移量开始。
例如:
| 根据时间()的持续时间和偏移进行分组 | 结果窗口边界 |
|---|---|
| 1分钟,30秒 | 00:30:00 - 01:30:00, 01:30:00 - 02:30:00, 等等。 |
| 5分钟,15秒 | 00:00:15 - 00:05:15, 00:05:15 - 00:10:15, 等等. |
| 1小时,20分钟 | 00:20:00 - 01:20:00, 01:20:00 - 02:20:00, 等等. |
为什么我的查询没有返回数据或部分数据?
您的查询未返回数据或部分数据的最常见原因:
- 查询错误的保留策略 (未返回数据)
- 在SELECT子句中没有字段键 (没有返回数据)
- SELECT 查询包括
GROUP BY time()(返回了now()之前的部分数据) - 标签和字段键同名
查询错误的保留策略
InfluxDB 自动查询数据库的默认保留政策中的数据 (作为 DBRP 映射 的一部分进行配置)。 如果您的数据与其他保留政策相关联,则必须指定正确的 保留政策以获取结果。
SELECT 子句中没有字段键
一个 InfluxQL 查询需要在 SELECT 子句中至少有一个 字段键。 如果 SELECT 子句仅包含 标签键,则查询返回空响应。 详情请参见 InfluxQL 数据探查。
SELECT 查询包含 GROUP BY time()
如果你的 SELECT 查询包含 GROUP BY time() 子句,只有 1677-09-21 00:12:43.145224194 和 now() 之间的数据点会被返回。如果你的数据点在 now() 之后出现,请在你的时间区间中指定 一个替代的上限。
标签和字段键具有相同名称
避免为标签和字段键使用相同的名称。 如果不小心为标签和字段键添加相同的名称,然后一起查询,查询结果显示第二个被查询的键(标签或字段)后面附加 _1。 要查询附加了 _1 的标签或字段键,您 必须去掉 附加的 _1 并包含 语法 ::tag 或 ::field。 例如:
-- Query duplicate keys using the correct syntax
SELECT "leaves"::tag, "leaves"::field FROM db.rp."grape"
name: grape
time leaves leaves_1
---- -------- ----------
1574128162128468000 species 6.00
1574128238044155000 5.00
为什么我的 GROUP BY time() 查询不返回发生在 now() 之后的时间戳?
SELECT 语句在 WHERE 子句中未定义时间范围时,默认时间范围为 1677-09-21 00:12:43.145224194 到 2262-04-11T23:47:16.854775806Z UTC。对于未指定时间范围但具有 GROUP BY time() 子句 的 SELECT 语句,默认时间范围为 1677-09-21 00:12:43.145224194 UTC 到 now()。
要查询在 now() 之后发生的时间戳数据,SELECT 语句必须在
WHERE 子句中提供一个替代的 上界,并带有 GROUP BY time() 子句。
例如:
SELECT MEAN("boards") FROM "hillvalley"
WHERE time >= '2022-01-01T00:00:00Z' AND time <= now() + 10d
GROUP BY time(12m) fill(none)
请注意,WHERE 子句必须提供一个替代的 上限 以覆盖默认的 now() 上限。以下查询仅重置下限为 now(),使查询的时间范围在 now() 和 now() 之间:
SELECT MEAN("boards") FROM "hillvalley"
WHERE time >= now()
GROUP BY time(12m) fill(none)
有关查询中时间语法的更多信息,请参阅 InfluxQL 数据探索。
我可以对时间戳执行数学运算吗?
InfluxQL不支持对时间戳值的数学运算符。大多数时间计算必须由接收查询结果的客户端进行。
对时间戳值使用InfluxQL函数的支持有限。 ELAPSED() 函数返回单个字段中后续时间戳之间的差异。
我可以从返回的时间戳中识别写入精度吗?
InfluxDB 将所有时间戳存储为纳秒值,无论提供的写入精度是什么。 InfluxQL 默默地从时间戳中去掉尾随零,这掩盖了初始的写入精度。由于 InfluxDB 在返回的时间戳上默默地去掉了尾随零,写入精度在返回的时间戳中无法识别。
我何时应该在查询中使用单引号而不是双引号?
遵循以下一般规则,用于 InfluxQL 查询中的引号:
单引号
- 用于引用字面字符串值,例如标签值。
- 不要在诸如数据库名称、保留策略名称、用户名、测量名称、标签键和字段键等标识符上使用。
- 用于日期时间字符串。
双引号
- 用于以数字开头、包含非
[A-z,0-9,_]字符的标识符,或是 InfluxQL 关键字。我们通常建议对所有标识符使用双引号,即使它们不符合这些标准。 - 不要在日期时间字符串上使用。
-- Correctly quote usage
SELECT bikes_available FROM bikes WHERE station_id='9'
SELECT "bikes_available" FROM "bikes" WHERE "station_id"='9'
SELECT MIN("avgrq-sz") AS "min_avgrq-sz" FROM telegraf
SELECT * from "cr@zy" where "p^e"='2'
SELECT "water_level" FROM "h2o_feet" WHERE time > '2015-08-18T23:00:01.232000000Z' AND time < '2015-09-19'
-- Incorrect quote usage
SELECT 'bikes_available' FROM 'bikes' WHERE 'station_id'="9"
SELECT * from cr@zy where p^e='2'
SELECT "water_level" FROM "h2o_feet" WHERE time > "2015-08-18T23:00:01.232000000Z" AND time < "2015-09-19"
为什么我的查询使用 WHERE OR 时间条件返回了空结果?
InfluxQL 不支持在 WHERE 子句中使用 OR 来指定多个时间范围,如果指定了多个,则返回空响应。 例如,以下查询将返回空响应:
SELECT * FROM "absolutismus"
WHERE time = '2016-07-31T20:07:00Z' OR time = '2016-07-31T23:07:17Z'
为什么 fill(previous) 返回空结果?
fill(previous) 如果查询的时间范围内没有先前的值,则不会填充空值。
我该如何使用相同的标签键和字段键查询数据?
使用 :: 语法来指定键是字段键还是标签键。例如:
SELECT * FROM "candied" WHERE "almonds"::field > 51
SELECT * FROM "candied" WHERE "almonds"::tag='true'
我如何跨测量查询数据?
InfluxQL 不支持查询多个度量 所有数据必须在单个度量下才能一起查询。 要执行跨度量查询, 使用 Flux。
查询中的订单时间戳是否重要?
不,它没有。以下查询之间只有一个微不足道的差异:
SELECT ... FROM ... WHERE time > 'timestamp1' AND time < 'timestamp2'
SELECT ... FROM ... WHERE time < 'timestamp2' AND time > 'timestamp1'
我如何通过具有空值的标签查询数据?
在你的 WHERE 子句中,使用 '' 指定一个空或为null的标签值。例如:
SELECT * FROM "vases" WHERE priceless=''
删除数据
我可以删除一个字段吗?
不。InfluxDB 2.7 不支持通过字段删除数据。
我可以删除一个测量吗?
是的。InfluxDB 2.7 支持通过测量删除数据。使用 _measurement 标签在您的 delete predicate 中识别要删除的测量。
_measurement == "example-measurement"
我可以同时删除多个测量吗?
不,InfluxDB 2.7 不支持在单个删除请求中删除多个测量。 要删除多个测量,针对每个测量发出删除请求。
我需要验证数据是否已删除吗?
一旦删除操作被提交到队列,就不需要验证它们。
/api/v2/delete 接口在删除请求被添加到队列时返回 204 响应。
如果您希望验证删除是否已发生,请尝试查询已删除的数据。 如果查询返回结果,则数据尚未完全删除。
InfluxDB 任务
重试任务如何影响相对时间范围?
当您重试使用相对时间范围的任务时,它将查询任务执行(运行)的原始时间范围。每当任务执行时,InfluxDB会将now选项设置为任务的计划执行时间。当使用range()或其他支持相对持续时间值的函数时,这些持续时间值相对于now(),它返回now选项的值。每次任务运行都有一个基于运行计划执行时间的唯一now选项。
序列及序列基数
系列基数是什么?
系列基数 是 唯一的总数 度量 和 标签集 组合 (系列)存储在磁盘上并索引在内存中。
为何系列基数重要?
InfluxDB 维护着每个 series 的内存索引。随着唯一系列数量的增加,内存使用量也随之增加。高系列基数可能会导致宿主操作系统因内存不足 (OOM) 异常而终止 InfluxDB 进程。
在Flux中使用 influxdb.cardinality() 或者在InfluxQL中使用 SHOW SERIES CARDINALITY 来测量一个桶中的系列基数。有关减少系列基数的信息,请参阅 解决高系列基数。
我该如何从索引中移除系列?
要从索引中移除一个系列:
- 使用
influxCLI或InfluxDB 2.7 API删除与系列关联的点。有关更多信息,请参见删除数据。 - 使用
influxd inspect build-tsi工具重建您的索引。