常见问题
账户管理
InfluxDB 服务健康状况
安全性
管理
- 如何识别我的 InfluxDB 版本?
- 如何识别我在 InfluxDB 中使用的 Flux 版本?
- 在哪里可以找到 InfluxDB 日志?
- 分片组持续时间和保留期之间有什么关系?
- 为什么在我更新 Bucket 的保留期后数据没有被删除?
数据类型
写入数据
- 如何写入整数和无符号整数字段值?
- InfluxDB 如何处理重复数据点?
- InfluxDB 写入 API 需要什么换行符?
- 何时应该使用单引号,何时应该使用双引号写入数据?
- 时间戳的精度重要吗?
- 写入稀疏历史数据的配置建议和模式指南是什么?
查询数据
- 如何在 InfluxDB v2.x 中使用 InfluxQL?
- 如何在 InfluxQL 函数中执行数学运算?
- 为什么我的查询返回 epoch 0 作为时间戳?
- 哪些 InfluxQL 函数支持嵌套?
- 什么决定了
GROUP BY time()
查询返回的时间间隔? - 为什么我的查询返回无数据或部分数据?
- 为什么我的
GROUP BY time()
查询不返回now()
之后的时间戳? - 我可以对时间戳执行数学运算吗?
- 我可以从返回的时间戳中识别写入精度吗?
- 何时应该在查询中使用单引号而不是双引号?
- 为什么我的带有
WHERE OR
时间子句的查询返回空结果? - 为什么
fill(previous)
返回空结果? - 如何查询具有相同标签键和字段键的数据?
- 如何跨 measurements 查询数据?
- 查询中时间戳的顺序重要吗?
- 如何按具有空值的标签查询数据?
删除数据
InfluxDB 任务
序列和序列基数
账户管理
如何重置我的密码?
使用 influx
CLI 和 influx user password
命令 命令来更新用户的密码。 有关更多信息,请参阅 更改您的密码。
InfluxDB 服务健康状况
在哪里可以查看我的 InfluxDB 实例的当前状态?
InfluxDB 2.7 提供了不同的方法来监控其状态
/health
API 端点 返回一个 JSON 响应体,其中包含您的 InfluxDB 实例当前状态的摘要。
/metrics
API 端点 以 Prometheus 指标暴露格式提供 InfluxDB 内部指标。 使用 Telegraf、InfluxDB 采集器 或 Fluxprometheus.scrape()
函数 采集这些指标并将它们存储在 InfluxDB 中,您可以在其中监控和告警任何异常情况。您还可以使用 InfluxDB 开源 (OSS) 指标模板 快速设置 InfluxDB OSS 监控。
有关更多信息,请参阅 使用模板监控 InfluxDB OSS
安全性
存在哪些不同类型的 API 令牌?
InfluxDB 2.7 支持以下令牌类型
操作员令牌
完全访问令牌
读/写令牌
有关每种令牌类型的更多信息,请参阅 管理 API 令牌。
我可以在禁用身份验证的情况下使用 InfluxDB 吗?
InfluxDB 2.7 通过要求 API 请求进行身份验证来强制执行安全最佳实践。 身份验证无法禁用。
管理
如何识别我的 InfluxDB 版本?
使用以下方法之一来识别您正在使用的 InfluxDB OSS 版本
使用 InfluxDB UI:
- 在用户登录页面上
- 在主登录页面的右侧列中
使用
influxd version
命令$ influxd version InfluxDB 2.7.11 (git: x0x000xx0x) build_date: YYYY-MM-DDThh:mm:ssZ
使用
/health
API 端点.以下示例使用
jq
来处理从/health
API 端点返回的 JSON 响应体,并提取 InfluxDB 版本。 您不必使用jq
处理 JSON。 有关/health
端点返回的 JSON 示例,请参阅 查看健康状况摘要示例。$ curl -s http://localhost:8086/health | jq -r '.version' 2.7.11
如何识别我在 InfluxDB 中使用的 Flux 版本?
有关与官方 InfluxDB 版本打包在一起的 Flux 版本的信息,请参阅 InfluxDB 中的 Flux 版本。
如果使用自定义构建,请使用以下查询来返回当前使用的 Flux 版本
import "array"
import "runtime"
array.from(rows: [{version: runtime.version()}])
有关更多信息,请参阅 查询 Flux 版本。
在哪里可以找到 InfluxDB 日志?
所有 InfluxDB 日志都由 influxd
服务输出。 要将日志存储到文件中,请将 influxd
的输出管道传输到文件。 例如
influxd 2>~/path/to/influxd-errors.log
分片组持续时间和保留期之间有什么关系?
InfluxDB Bucket 将数据存储在分片组中。 单个分片组覆盖特定的时间间隔。 InfluxDB 通过使用 Bucket 的保留期来确定该时间间隔。 下表概述了 Bucket 保留期与分片组时间间隔之间的默认关系
Bucket 保留期 | 默认分片组持续时间 |
---|---|
少于 2 天 | 1 小时 |
介于 2 天和 6 个月之间 | 1 天 |
大于 6 个月 | 7 天 |
有关更多信息,请参阅 InfluxDB 分片和分片组。
为什么在我更新 Bucket 的保留期后数据没有被删除?
以下是 Bucket 的保留期更新后数据可能不会立即删除的原因
保留期强制服务每 30 分钟运行一次(默认情况下)。 您可能需要等待下一个保留期强制周期运行。
InfluxDB 删除分片组,而不是单个数据点。 分片组覆盖在创建时分配给分片组的特定时间间隔。 只有当分片组覆盖的整个时间范围超出 Bucket 保留期时,保留期服务才会删除分片组。
如果 Bucket 的新保留期小于旧分片组持续时间,并且 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 类型转换函数 允许您在查询时更改字段的数据类型。 但是,您无法更改磁盘上字段的类型。 以下是一些可能的解决方法
将字段复制为新字段,并更改类型。 以下示例执行以下操作
- 查询
example-string-field
。 - 将字段值转换为布尔值。
- 将字段名称更改为
example-boolean-field
。 - 将新字段写入源 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")
- 查询
将字段复制为新 Bucket,并更改类型。 以下示例执行以下操作
- 从
example-bucket-1
Bucket 查询example-int-field
。 - 将字段值转换为浮点值。
- 将字段名称更改为
example-float-field
。 - 将新字段写入
example-bucket-2
Bucket。
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")
- 从
InfluxDB 如何处理跨分片的字段类型差异?
字段值可以是浮点数、整数、字符串或布尔值。 字段值类型在 分片 内不能不同,但它们可以跨分片 不同。
如果所有值都具有相同的类型,则 SELECT
语句 返回所有字段值 如果。 如果字段值类型跨分片不同,则 InfluxDB 首先执行任何适用的 类型转换 操作,然后返回所有值,类型按以下列表中的顺序优先:浮点数、整数、字符串、布尔值。
如果您的数据具有字段值类型差异,请使用语法 <field_key>::<type>
查询不同的数据类型。
示例
measurement 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
返回与字段键关联的每个数据类型,跨越每个分片。
示例
measurement 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 通过其 measurement、标签集 和 时间戳 唯一标识一个数据点。 如果您提交一个新数据点,其 measurement、标签集和时间戳与现有数据点相同,则 InfluxDB 将旧字段与新字段集合并,并且任何冲突都将采用新字段集。
有关更多信息,请参阅 处理重复数据点。
InfluxDB 写入 API 需要什么换行符?
InfluxDB Line Protocol 依赖于换行符(\n
,即 ASCII 0x0A
)来指示一行的结束和新一行的开始。 使用 \n
以外的换行符的文件或数据将导致类似于 bad timestamp
或 unable to parse
的错误。
Windows 换行符
Windows 使用回车符和换行符 (\r\n
) 作为换行符,如果您在 Windows 机器上手动编写 Line Protocol,这将导致错误。 在将 Line Protocol 提交到 InfluxDB 写入 API 之前,请删除任何回车符 (\r
)。
何时应该使用单引号,何时应该使用双引号写入数据?
Line Protocol 引号使用指南在 Line Protocol 文档 中提供。
时间戳的精度重要吗?
是的。 时间戳精度会影响摄取性能。 时间戳越精确,写入数据点所需的时间就越长。 为了最大限度地提高性能,在将数据写入 InfluxDB 时,请使用尽可能粗略的时间戳精度。 但是,如果精度太粗略,您可能会冒着写入来自同一序列的具有相同时间戳的数据点的风险,这将视为 重复数据点。
写入稀疏历史数据的配置建议和模式指南是什么?
对于稀疏历史数据,我们建议
在您要写入历史数据的 Bucket 上使用更长的 分片组持续时间。 历史分片组持续时间可以并且应该覆盖数年。 如果您的历史数据跨越多年,但您的 Bucket 的分片组持续时间为 1 周,则 InfluxDB 将创建许多分片,从而对整体性能产生负面影响。
在摄取历史数据时,暂时降低
storage-cache-snapshot-write-cold-duration
配置设置。 默认设置 (10m
) 可能会导致系统缓存每个分片的所有数据。 在您写入历史数据时,暂时将storage-cache-snapshot-write-cold-duration
设置降低到10s
可以使该过程更有效率。
查询数据
Flux
如何将字段结构化为列(如 InfluxQL)?
InfluxQL 中的 SELECT
语句为每个查询的标签和字段返回一个列。Flux from()
函数为每个标签返回一个列,以及一个包含字段键的 _field
列。每个字段被分组到不同的表中。
要将每个字段构建为列,请使用 pivot()
或 schema.fieldsAsCols()
。
exampleData
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
import "influxdata/influxdb/schema"
exampleData
|> schema.fieldsAsCols()
from() 返回的数据示例
_measurement | sensor_id | location | _field | _time | _value |
---|---|---|---|---|---|
machine | abc123 | station20 | temp | 2022-01-01T00:00:00Z | 150.1 |
machine | abc123 | station20 | temp | 2022-01-01T00:00:10Z | 152.8 |
machine | abc123 | station20 | temp | 2022-01-01T00:00:20Z | 153.3 |
_measurement | sensor_id | location | _field | _time | _value |
---|---|---|---|---|---|
machine | abc123 | station20 | flow | 2022-01-01T00:00:00Z | 12.2 |
machine | abc123 | station20 | flow | 2022-01-01T00:00:10Z | 14.9 |
machine | abc123 | station20 | flow | 2022-01-01T00:00:20Z | 16.1 |
透视数据示例
_measurement | sensor_id | location | _time | temp | flow |
---|---|---|---|---|---|
machine | abc123 | station20 | 2022-01-01T00:00:00Z | 150.1 | 12.2 |
machine | abc123 | station20 | 2022-01-01T00:00:10Z | 152.8 | 14.9 |
machine | abc123 | station20 | 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?
通过 1.x 兼容性 API,可以在 InfluxDB 2.7 中使用 InfluxQL,该 API 复制了 InfluxDB 1.x 中的 /query
端点。这允许所有与 InfluxDB 1.x 兼容的客户端与 InfluxDB 2.7 一起使用。但是,InfluxQL 依赖于数据库和保留策略数据模型,该模型在 InfluxDB 2.7 中不存在,而是被 buckets(存储桶) 所取代。
InfluxDB 2.7 允许您使用 DBRP 映射将 InfluxQL 中使用的唯一数据库和保留策略组合映射到特定的存储桶。
有关在 InfluxDB 2.7 中使用 InfluxQL 和配置 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 中,纪元 0 (1970-01-01T00:00:00Z
) 通常用作 null 时间戳的等效值。如果您请求一个没有时间戳返回的查询,例如具有无界时间范围的聚合函数,则 InfluxDB 返回纪元 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 数据库的预设时间窗口或用户指定的 偏移间隔。
预设时间窗口
例如,以下查询计算下午 6:15 到下午 7:45 之间 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()
子句中指定的持续时间来按时间对数据进行分区。预设时间窗口边界落在指定的持续时间单位上。
例如
GROUP BY time() duration | 结果窗口边界 |
---|---|
1s | 00:00:00 - 00:00:01, 00:00:01 - 00:00:02, 等等。 |
1m | 00:00:00 - 00:01:00, 00:01:00 - 00:02:00, 等等。 |
5m | 00:00:00 - 00:05:00, 00:05:00 - 00:10:00, 等等。 |
1 小时 | 1h |
虽然窗口边界可能落在查询时间范围之外,但每个窗口的计算中仅使用查询时间范围内的点。
偏移时间窗口
再举一个例子,以下查询计算下午 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()
子句中指定的持续时间和偏移量来按时间对数据进行分区。时间边界从指定的偏移量开始。
例如
GROUP BY time() duration and offset | 结果窗口边界 |
---|---|
1m,30s | 00:30:00 - 01:30:00, 01:30:00 - 02:30:00, 等等。 |
5m,15s | 00:00:15 - 00:05:15, 00:05:15 - 00:10:15, 等等。 |
1h,20m | 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()
之后的时间戳?
在 WHERE
子句中未定义时间范围的 SELECT
语句的默认时间范围为 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()
之后的数据,带有 GROUP BY time()
子句的 SELECT
语句必须在 WHERE
子句 中提供备用的上限。例如
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'
如何跨 measurements 查询数据?
InfluxQL 不支持查询多个 measurement。所有数据必须在单个 measurement 下才能一起查询。要执行跨 measurement 的查询,请使用 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 不支持按字段删除数据。
我可以删除 measurement 吗?
是。InfluxDB 2.7 支持按 measurement 删除数据。在您的 删除谓词 中使用 _measurement
标签来标识要删除的 measurement。
_measurement == "example-measurement"
我可以同时删除多个 measurements 吗?
否。InfluxDB 2.7 不支持在单个删除请求中删除多个 measurement。要删除多个 measurement,请为每个 measurement 发出删除请求。
我是否需要验证数据是否已删除?
提交到队列后,无需验证删除操作。当删除请求已添加到队列时,/api/v2/delete
端点返回 204 响应。
如果您希望验证是否已发生删除,请尝试查询已删除的数据。如果查询返回结果,则数据尚未完全删除。
InfluxDB 任务
重试任务如何影响相对时间范围?
当您重试使用相对时间范围的任务时,它将查询任务执行(运行)的原始时间范围。每当任务执行时,InfluxDB 会将任务中的 now
选项设置为任务的计划执行时间。当使用 range()
或其他支持相对持续时间值的函数时,这些持续时间值相对于 now()
,后者返回 now
选项的值。每个任务运行都有一个唯一的 now
选项,该选项基于计划运行执行的时间。
序列和序列基数
什么是序列基数?
measurement 和 tag set 组合(序列)存储在磁盘上并在内存中索引的总数。
为什么序列基数很重要?
InfluxDB 维护每个 series(序列) 的内存索引。随着唯一序列数量的增长,内存使用量也会增加。高序列基数可能会强制主机操作系统使用内存不足 (OOM) 异常终止 InfluxDB 进程。
在 Flux 中使用 influxdb.cardinality()
或在 InfluxQL 中使用 SHOW SERIES CARDINALITY
来测量存储桶中的序列基数。请参阅 解决高序列基数,以获取有关降低序列基数的信息。
如何从索引中删除序列?
要从索引中删除序列
- 使用
influx
CLI 或 InfluxDB 2.7 API 删除与序列关联的点。有关更多信息,请参阅 删除数据。 - 使用
influxd inspect build-tsi
工具重建您的索引。
此页是否对您有帮助?
感谢您的反馈!