排查 InfluxQL 错误
了解如何排查和修复常见的 InfluxQL 错误。
免责声明: 本文档不包含所有可能的 InfluxQL 错误的详尽列表。
- error: 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。
error: database name required
error: database name required原因
当某些 SHOW 查询 未在查询或查询请求中指定 数据库 时,会出现 database name required 错误。
例如,以下 SHOW 查询未指定数据库,并假定 db 未在 /query API 请求中指定
SHOW MEASUREMENTS解决方案
要解决此错误,请通过以下任一方式在查询请求中指定数据库:
在
SHOW语句中包含ON子句,并指定要查询的数据库SHOW MEASUREMENTS ONDATABASE_NAME如果使用的是 InfluxDB v1 查询 API,请在请求中包含
db查询参数curl --get https://:8181/query \ --header "Authorization: BearerDATABASE_TOKEN" \ --data-urlencode "db=DATABASE_NAME" \ --data-urlencode "q=SHOW MEASUREMENTS"
相关: InfluxQL SHOW 语句, 使用 InfluxQL 探索模式
error parsing query: found …, expected identifier at …
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
error parsing query: mixing aggregate and non-aggregate queries is not supported原因
当 SELECT 语句同时包含 聚合函数 和独立的 字段键 或 标签键 时,会出现 mixing aggregate and non-aggregate 错误。
聚合函数为每个组和列返回一个单一的计算值,而对于任何未聚合的字段或标签,没有明显的单一值可以返回。
例如,以下示例从 home 测量中查询两个字段——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 时间戳。
相关: 查询时间范围内的 \u5904\u6570\u636e, WHERE 子句 - 时间范围, InfluxQL 时间语法
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 InfluxDB 3 Core 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。