InfluxQL 错误问题排查
InfluxDB 3 Core 处于公开 Alpha 阶段
InfluxDB 3 Core 处于公开 alpha 阶段,可用于测试和反馈,但不适用于生产环境。产品和本文档均在不断完善中。我们欢迎并鼓励您提供关于 alpha 体验的输入,并邀请您加入我们的公共频道以获取更新和分享反馈。
了解如何排查和修复常见的 InfluxQL 错误。
免责声明: 本文档不包含所有可能的 InfluxQL 错误的详尽列表。
- 错误:database name required
- error parsing query: found …, expected identifier at …
- error parsing query: mixing aggregate and non-aggregate queries is not supported
- invalid operation: time and *influxql.VarRef are not compatible
InfluxDB v1 到 InfluxDB 3 数据模型
InfluxQL 是围绕 InfluxDB v1 数据模型设计的,但仍可用于查询 InfluxDB 3 Core 中的数据。当使用 InfluxDB 3 Core InfluxQL 实现时,数据模型在以下方面有所不同
- InfluxDB v1 数据库和保留策略组合成一个 InfluxDB 3 数据库实体。
- InfluxDB v1 measurement 相当于 InfluxDB 3 table。
错误:database name required
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://#:8181/query \ --header "Authorization: Bearer
DATABASE_TOKEN" \ --data-urlencode "db=DATABASE_NAME" \ --data-urlencode "q=SHOW MEASUREMENTS"
相关主题: InfluxQL SHOW
语句, 使用 InfluxQL 探索您的 Schema
error parsing query: found …, expected identifier at …
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
error parsing query: mixing aggregate and non-aggregate queries is not supported
原因
当 SELECT
语句同时包含 聚合函数 和独立的 字段键 或 标签键 时,会发生 mixing aggregate and non-aggregate
错误。
聚合函数为每个组和列返回一个计算值,对于任何未聚合的字段或标签,没有明显的单个值可以返回。
例如,以下示例查询来自 home
measurement 的两个字段 – temp
和 hum
。但是,它仅将聚合函数 MEAN
应用于 temp
字段。
SELECT MEAN(temp), hum FROM home
解决方案
要修复此错误,请将聚合函数或选择器函数应用于每个查询的字段
SELECT MEAN(temp), MAX(hum) FROM home
相关主题: InfluxQL 函数, 使用 InfluxQL 聚合数据
invalid operation: time and *influxql.VarRef are not compatible
invalid operation: time and *influxql.VarRef are not compatible
原因
当在查询中用双引号括起日期时间字符串时,会发生 time and \*influxql.VarRef are not compatible
错误。日期时间字符串应格式化为字符串字面量并用单引号 (''
) 括起来。
例如
返回以下错误
invalid operation: time and *influxql.VarRef are not compatible
解决方案
要修复此错误,请用单引号而不是双引号括起 RFC3339 时间戳。
相关主题: 在时间范围内查询数据, WHERE
子句 – 时间范围, InfluxQL 时间语法
此页是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 3 Core 和本文档的反馈和错误报告。要获得支持,请使用以下资源
拥有年度合同或支持合同的客户 可以联系 InfluxData 支持。