文档文档

InfluxQL 错误问题排查

了解如何排查和修复常见的 InfluxQL 错误。

免责声明: 本文档不包含所有可能的 InfluxQL 错误的详尽列表。

InfluxDB v1 到 InfluxDB 3 数据模型

InfluxQL 是围绕 InfluxDB v1 数据模型设计的,但仍可用于查询 InfluxDB 3 Core 中的数据。当使用 InfluxDB 3 Core InfluxQL 实现时,数据模型在以下方面有所不同

  • InfluxDB v1 数据库和保留策略 组合被合并为一个 InfluxDB 3 数据库 实体。
  • InfluxDB v1 measurement(测量) 等同于 InfluxDB 3 table(表)

错误:需要数据库名称

error: database name required

原因

当某些 SHOW 查询 未在查询中或使用查询请求指定 数据库 时,会发生 database name required 错误。

例如,以下 SHOW 查询未指定数据库,并假定 db 未在 /query API 请求中指定

SHOW MEASUREMENTS

解决方案

要解决此错误,请通过执行以下操作之一,在查询请求中指定数据库

  • SHOW 语句中包含 ON 子句,以指定要查询的数据库

    SHOW MEASUREMENTS ON 
    DATABASE_NAME
  • 如果使用 InfluxDB v1 查询 API,请在您的请求中包含 db 查询参数

    curl --get https://localhost:8181/query \
      --header "Authorization: Bearer 
    DATABASE_TOKEN
    "
    \
    --data-urlencode "db=
    DATABASE_NAME
    "
    \
    --data-urlencode "q=SHOW MEASUREMENTS"

相关主题: InfluxQL SHOW 语句使用 InfluxQL 浏览您的模式


错误解析查询:发现…,在…处应为标识符

error parsing query: found EXAMPLE, expected identifier at line 1, char 14

原因

当 InfluxDB 预期在查询中找到标识符但未找到时,会发生此错误。标识符是指数据库名称、保留策略名称、measurement(测量)名称、字段键和标签键的标记。

此错误通常由以下原因之一引起

缺少必需的标识符

某些 InfluxQL 语句和子句需要标识符来标识数据库、measurement(测量)、标签或字段。如果语句缺少必需的标识符,则查询返回 expected identifier 错误。

例如,以下查询从 FROM 子句 中省略了 measurement(测量)名称

SELECT * FROM WHERE color = 'blue'
解决方案

更新查询以在 FROM 子句中包含预期的标识符,以标识要查询的 measurement(测量)

SELECT * FROM measurement_name WHERE color = 'blue'

使用了字符串字面量而不是标识符

在 InfluxQL 中,字符串字面量用单引号 ('') 括起来,而用双引号 ("") 括起来的字符序列被解析为标识符。如果您使用单引号来括起标识符,则该标识符将被解析为字符串字面量,并返回 expected identifier 错误。

例如,以下查询用单引号括起了 measurement(测量)名称

SELECT * FROM 'measurement-name' WHERE color = 'blue'

导致以下错误

error parsing query: found measurement-name, expected identifier at line 1, char 14
解决方案

更新单引号标识符以使用双引号,以便将它们解析为标识符而不是字符串字面量。

SELECT * FROM "measurement-name" WHERE color = 'blue'

InfluxQL 关键字用作了未加引号的标识符

InfluxQL 关键字 是为 InfluxQL 语法中的特定功能保留的字符序列。可以将关键字用作标识符,但标识符必须用双引号 ("") 括起来。

虽然将作为 InfluxQL 关键字的标识符用双引号括起来是一种可接受的解决方法,但为简单起见,您应避免使用 InfluxQL 关键字 作为标识符。

SELECT duration FROM runs

返回以下错误

error parsing query: found DURATION, expected identifier, string, number, bool at line 1, char 8
解决方案

InfluxQL 关键字 用作标识符时,请用双引号将其括起来

SELECT "duration" FROM runs

相关主题: InfluxQL 关键字


错误解析查询:不支持混合聚合查询和非聚合查询

error parsing query: mixing aggregate and non-aggregate queries is not supported

原因

SELECT 语句同时包含 聚合函数 和独立的 字段键标签键 时,会发生 mixing aggregate and non-aggregate 错误。

聚合函数为每个组和列返回单个计算值,而对于任何未聚合的字段或标签,没有明显的单个值可以返回。

例如,以下示例从 home measurement(测量)中查询两个字段 – temphum。但是,它仅将聚合函数 MEAN 应用于 temp 字段。

SELECT MEAN(temp), hum FROM home

解决方案

要修复此错误,请将聚合函数或选择器函数应用于每个查询的字段

SELECT MEAN(temp), MAX(hum) FROM home

相关主题: InfluxQL 函数使用 InfluxQL 聚合数据


无效操作:time 和 *influxql.VarRef 不兼容

invalid operation: time and *influxql.VarRef are not compatible

原因

当日期时间字符串在查询中用双引号括起来时,会发生 time and \*influxql.VarRef are not compatible 错误。日期时间字符串应格式化为字符串字面量并用单引号 ('') 括起来。

例如

SELECT temp
FROM home
WHERE
  time >= "2022-01-01T08:00:00Z"
  AND time <= "2022-01-01T00:20:00Z"

返回以下错误

invalid operation: time and *influxql.VarRef are not compatible

解决方案

要修复此错误,请将 RFC3339 时间戳用单引号而不是双引号括起来。

SELECT temp
FROM home
WHERE
  time >= '2022-01-01T08:00:00Z'
  AND time <= '2022-01-01T00:20:00Z'

相关主题: 在时间范围内查询数据WHERE 子句 – 时间范围InfluxQL 时间语法


此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像目前一样使用它,无需对代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,从而实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层级可供非商业家庭或业余爱好者使用。

有关更多信息,请查看