Documentation

排查 InfluxQL 错误

学习如何排查和修复常见的InfluxQL错误。

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

错误:需要数据库名称

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://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 keywords 用作标识符。

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 语句包含一个 聚合函数 和一个独立的 字段键标签键 时,会发生 混合聚合和非聚合 错误。

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

例如,下面的示例查询了来自home测量的两个字段——temphum。然而,它只对temp字段应用了聚合函数MEAN

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 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: