文档说明

故障排除 InfluxQL 错误

了解如何故障排除和修复常见的 InfluxQL 错误。

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

错误:需要数据库名称

error: database name required

原因

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

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

SHOW MEASUREMENTS

解决方案

要解决此错误,可以通过以下方式之一在查询请求中指定数据库:

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

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

    curl --get https://cluster-host.com/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 预期查询中存在一个标识符但未找到时,会引发此错误。标识符是引用数据库名称、保留策略名称、度量名称、字段键和标签键的标记。

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

缺少所需的标识符

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

例如,以下查询省略了 FROM 子句中的度量名称

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

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

SELECT * FROM measurement_name WHERE color = 'blue'

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

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

例如,以下查询将度量名称用单引号括起来

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 度量查询两个字段–temphum。但是,它只将聚合函数 MEAN 应用于 temp 字段。

SELECT MEAN(temp), hum FROM home

解决方案

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

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

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


无效操作:时间和 *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 v3增强和InfluxDB Clustered现已全面上市

新功能,包括更快的查询性能和管理工具,推进了InfluxDB v3产品线。InfluxDB Clustered现已全面上市。

InfluxDB v3性能和功能

InfluxDB v3产品线在查询性能方面取得了显著提升,并提供了新的管理工具。这些增强包括用于监控InfluxDB集群健康状况的操作仪表板、InfluxDB Cloud Dedicated中的单一登录(SSO)支持以及用于令牌和数据库的新管理API。

了解新的v3增强功能


InfluxDB Clustered全面上市

InfluxDB Clustered现已全面上市,并为您在自管理堆栈中提供了InfluxDB v3的力量。

与我们谈论InfluxDB Clustered