本文介绍查询与分析日志的常见报错及对应的解决方法。
logstore * does not exist
logstore without index config
Too many queued queries
错误描述
您当前查询的Logstore中索引字段别名发生冲突,SQL无法确定您想要分析的具体列。
原理解释
SLS SQL并发配额是用户Project级别隔离,同一个Project中的多个SQL请求提交到SLS服务端,当SQL正在执行中,将占用一个SQL并发配额;当SQL执行完成,将归还本次分配的SQL并发配额。 用户一个Project的SQL并发配额,执行普通SQL模式时为15,执行增强SQL模式时为150。
报错原因
您的并发请求数过高。
您单次请求SQL的延时较高。
您的业务代码中SQL请求异常重试逻辑导致的大量循环重试。
解决方法
降低请求量。
优化SQL,减少单次SQL的执行延时。
重试逻辑增加随机等待时间,避免无效重复的循环重试,导致额外并发请求压力的增加。
duplicate column conflicts
denied by sts or ram, action:*
you are using nested sql, please specify FROM LOGSTORE in the innermost sql
错误描述
您正在SQL中使用嵌套子查询,请在最内层的子查询中指定表名。
报错原因
SLS为了简化用户查询,在进行单表查询时,默认指定当前所在Logstore为FROM所在表。假设您当前Logstore名为test,那么,以下3个查询语句是同义的:
语句1:您可以不指定FROM子句。
语句2:您可以使用FROM log,这将指定当前所在Logstore。
语句3:您可以明确指定您查询的表为Logstore为test。
但当您进行包含子查询的复杂查询时,SLS无法为您推断各子查询中目标表,所以您必须在子查询中手动指定FROM子句。
解决方法
如果您想查询当前Logstore,您可以直接使用"FROM log"常量字符串指定From表为当前Logstore。
当然您也可以明确指定您要查询的目标Logstore名字。
IN value and list items must be the same type: varchar
Unexpected parameters (bigint) for function url_decode. Expected: url_decode(varchar(x))
错误描述
SQL语句中存在语法错误,使用SQL函数时,输入的参数类型不正确。
报错原因
该函数需要接收一个字符串类型的参数,但是输入的参数类型为bigint。
这类错误可能出现在不同的函数中,不一定是url_decode,也有可能是regexp_like,但错误原因一样:使用SQL函数时,输入的参数类型不正确。
解决方法
将输入的参数转换为字符串类型后再传递给url_decode函数。可以使用CAST或CONVERT函数将bigint类型的参数转换为字符串类型的参数,或者直接在调用该函数时使用引号将参数括起来,将其转换为字符串类型。例如:
SELECT url_decode(CAST(bigint_param AS varchar(20))) -- 使用CAST函数将bigint类型参数转换为字符串类型SELECT url_decode('123456789') -- 若参数是字面量,可以直接将参数括起来,将其转换为
target of repeat operator is not specified
NULL values are not allowed on the probe side of SemiJoin operator. See the query plan for details.
Array subscript out of bounds
Expression "*" is not of type ROW
Key-value delimiter must appear exactly once in each entry. Bad input: '*'
Pattern has # groups. Cannot access group
错误描述
正则匹配无法访问指定组。
报错原因
正则匹配到0个组,无法访问第1个组。 有可能在正则表达式中使用了分组语法,但是没有定义任何分组。在此情况下,无法访问分组,因为分组根本不存在。
解决方法
检查正则表达式中的分组语法,并确保至少有一个分组定义在模式中。可以使用圆括号 () 来定义分组。例如,要匹配一个字符串中的电子邮件地址,并将用户名和域名分别作为分组,请使用以下正则表达式:(w+)@(w+.w+)。在这个例子中,有两个分组,因此可以用 group(1) 和 group(2) 来访问分组的值。如果不需要分组,可以使用非捕获分组,例如:(?:w+)@(?:w+.w+)。如果问题依然存在,可以使用在线正则检查器进行在线调试,待验证无误后再填充到SQL中。
ts_compare must gropu by timestamp,your grouping by type is :bigint
错误描述
ts_compare函数必须按timestamp类型分组。
报错原因
您在SQL中使用ts_compare函数时,group by的列,可能是非timestamp类型的数值型或其他类型。
解决方法
请确保ts_compare函数对应的group by列类型使用正确的timestamp类型,您可以使用from_unixtime函数等函数将整型时间戳转换成timestamp类型。
time # is out of specified time range
ROW comparison not supported for fields with null elements
The specified key does not exist.
reading data with pagination only allow reading max
Could not choose a best candidate operator. Explicit type casts must be added.
错误描述
无法选择最佳的候选操作符,必须添加显式类型转换。
报错原因
这通常是因为您正在尝试在不同类型变量之间执行算术或比较操作,而系统无法自动识别应该使用哪种类型的操作符。
解决方法
您需要添加显式的类型转换来告诉系统应该使用哪种类型的操作符。
例如,如果您正在尝试将一个字符串类型的变量和一个整数类型的变量相加,您可以使用CAST函数来将字符串类型的变量转换为整数类型,然后再执行加法操作。示例代码如下:
SELECT CAST('10' AS INTEGER) + 5;
在这里,我们使用CAST函数将字符串类型的变量'10'转换为整数类型,然后将其与整数类型的变量5相加。这样可以避免出现以上错误。
Function * not registered
SQL array indices start at 1
Index must be greater than zero
All COALESCE operands must be the same type: *
Multiple columns returned by subquery are not yet supported.
GROUP BY clause cannot contain aggregations or window functions: *
错误描述
GROUP BY子句不能包含聚合函数或窗口函数。
报错原因
在GROUP BY子句中包含聚合函数或窗口函数。
解决方法
请在GROUP BY子句中只包含列名,而不是聚合函数或窗口函数。聚合函数和窗口函数应该在SELECT语句中使用,而不是在GROUP BY子句中使用。如果您需要在GROUP BY子句中使用聚合函数,则可以使用列的别名或数字索引来代替聚合函数。例如,使用以下查询:
SELECT column1, column2, COUNT(column3) as count_column3 FROM table GROUP BY column1, column2, 3
在这个查询中,count_column3 是 COUNT(column3) 的别名,3 是 COUNT(column3) 在SELECT语句中的位置。请注意,使用数字索引可能会使代码难以理解,建议使用列别名。
WHERE BY clause cannot contain aggregations or window functions: *
错误描述
WHERE子句不能包含聚合函数或窗口函数。
报错原因
在WHERE子句中包含聚合函数或窗口函数。
解决方法
请在WHERE子句中只包含列名,而不是聚合函数或窗口函数。聚合函数和窗口函数应该在SELECT语句中使用,而不是在WHERE子句中使用。如果您需要在WHERE子句中使用聚合函数,则可以使用列的别名来代替聚合函数。
例如,使用以下查询:
SELECT column1, column2, COUNT(column3) as count_column3 FROM table WHERE count_column3 > 10
在这个查询中,count_column3 是 COUNT(column3) 的别名,它代表column3的聚合计数结果。
Left side of LIKE expression must evaluate to a varchar (actual: bigint)
Left side of logical expression must evaluate to a boolean (actual: varchar)
Right side of logical expression must evaluate to a boolean (actual: bigint)
Invalid JSON path: ...
错误描述
非法JSON访问路径。
报错原因
您在SQL中使用JSON函数(如json_extract、json_extract_scalar、json_size等)访问指定的JSON路径时,未指定有效路径。
解决方法
正常指定json_path,格式为
$.a.b
。其中$
代表当前JSON对象的根节点,半角句号.
引用到待提取的节点(可级联),但是当JSON对象的字段中存在特殊字符(如.
、空格-
等),例如 http.path、http path、http-path等,则需要使用中括号[]
代替半角句号.
,然后使用双引号""
包裹字段名,例如:* | SELECT json_extract_scalar(request, '$["X-Power-Open-App-Id"]')
您可以参考JSON函数使用说明,了解JSON函数和json_path的具体用法。您还可以参考查询和分析JSON日志的常见问题了解json_path的具体使用方式。
max distinct num is:10, please use approx_distinct
Key not present in map
line 1:44: Column 'XXX' cannot be resolved;please add the column in the index attribute
报错原因
未对XXX字段建立索引。
解决方法
为目标字段设置索引,并开启统计功能。具体操作,请参见创建索引。
ErrorType:QueryParseError.ErrorMessage:syntax error error position is from column:10 to column:11,error near < : >
报错原因
查询和分析语句的语法错误,错误位置在冒号(:)附近。
解决方法
检查及修改查询和分析语句,然后重新执行。
Column 'XXX' not in GROUP BY clause;please add the column in the index attribute
报错原因
在SQL语句中,如果您使用了GROUP BY子句,则在执行SELECT语句时,只能选择GROUP BY的列或者对任意列进行聚合计算,不允许选择非GROUP BY的列。例如
* | SELECT status, request_time, COUNT(*) AS PV GROUP BY status
为非法分析语句,因为request_time不是GROUP BY的列。解决方法
修改查询和分析语句,然后重新执行。例如上述示例的正确语句为
* | SELECT status, arbitrary(request_time), count(*) AS PV GROUP BY status
。更多信息,请参见GROUP BY子句。
sql query must follow search query,please read syntax doc
报错原因
仅使用了分析语句。在日志服务中,分析语句必须与查询语句一起使用,格式为
查询语句|分析语句
。解决方法
在分析语句前加上查询语句,例如
* | SELECT status, count(*) AS PV GROUP BY status
。更多信息,请参见基础语法。
line 1:10: identifiers must not start with a digit; surround the identifier with double quotes
报错原因
分析语句中的列名、变量名等以数字开头,不符合规范。在SQL标准中,列名必须由字母、数字和下划线(_)组成,且以字母开头。
解决方法
更改别名。如何修改,请参见列的别名。
line 1:9: extraneous input ‘’ expecting
报错原因
输入了多余的中文引号。
解决方法
检查及修改查询和分析语句,然后重新执行。
key (XXX) is not config as key value config,if symbol : is in your log,please wrap : with quotation mark "
报错原因
未对XXX字段建立字段索引,或者您所使用的字段中包含了特殊字符(例如空格)但未使用双引号("")包裹。
解决方法
确认是否已为目标字段创建字段索引且开启统计功能。
如果是,请执行下一步。
如果不是,请先为目标字段创建字段索引且开启统计功能。具体操作,请参见手动创建字段索引。
执行该操作后,如果问题解决,则无需执行下一步。
使用双引号("")包裹目标字段。
Query exceeded max memory size of 3GB
报错原因
当前查询和分析语句所使用的服务端内存超过3 GB。该问题通常是因为使用GROUP BY子句去重后,值太多导致的。
解决方法
优化GROUP BY子句,减少GROUP BY子句中字段的个数。
ErrorType:ColumnNotExists.ErrorPosition,line:0,column:1.ErrorMessage:line 1:123: Column 'XXX' cannot be resolved; it seems XXX is wrapper by ";if XXX is a string ,not a key field, please use 'XXX'
报错原因
XXX不是索引字段,不能使用双引号("")包裹。在分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。
解决方法
如果XXX为分析字段,您需要为该字段配置索引,并开启统计功能。具体操作,请参见创建索引。
如果XXX为普通字符串,需要使用单引号('')包裹。
user can only run 15 query concurrently
报错原因
分析操作并发数超过了15个。在日志服务中,单个Project支持的最大分析操作并发数为15个。
解决方法
合理控制分析操作的并发数。
unclosed string quote
报错原因
查询和分析语句的双引号(")未成对出现。
解决方法
检查及修改查询和分析语句,然后重新执行。
error after :.error detail:error after :.error detail:line 1:147: mismatched input 'in' expecting {<EOF>, 'GROUP', 'ORDER', 'HAVING', 'LIMIT', 'OR', 'AND', 'UNION', 'EXCEPT', 'INTERSECT'}
报错原因
输入了错误的关键词in。
解决方法
检查及修改查询和分析语句,然后重新执行。
Duplicate keys (XXX) are not allowed
报错原因
建立索引时,为字段配置了重复的索引。
解决方法
检查您的索引配置。具体操作,请参见创建索引。
only support * or ? in the middle or end of the query
报错原因
使用模糊查询时,未正确使用通配符。
解决方法
修改查询和分析语句中的通配符。相关说明如下:
支持在词的中间或者末尾加上模糊查询关键字,即星号(*)或问号(?)。
星号(*)或问号(?)不能用在词的开头。
long数据类型和double数据类型不支持使用星号(*)或问号(?)进行模糊查询。
logstore (xxx) is not found
报错原因
日志库XXX不存在或未配置索引。
解决方法
请检查对应的日志库是否存在。如果存在,请确保至少存在一个字段索引且开启统计功能。
condition number 43 is more than 30
报错原因
您在查询语句中使用的字段数为43个,超过日志服务所限制的30个。
解决方法
请修改查询语句,将字段数量控制在30个以内。
ErrorType:SyntaxError.ErrorPosition,line:1,column:19.ErrorMessage:line 1:19: Expression "data" is not of type ROW
报错原因
查询和分析语句中所使用的字段的数据类型错误。
解决方法
请检查ROW函数的参数是否正确,并且参数中所有的字段是否存在且符合要求。如果参数正确,但结果仍然不是ROW类型,可以尝试使用CAST函数将其转换为ROW类型。
ErrorType:SyntaxError.ErrorPosition,line:1,column:9.ErrorMessage:line 1:9: identifiers must not contain ':'
报错原因
您所分析的字段中包含了半角冒号(:)。
解决方法
使用半角双引号("")包裹字段。例如您要分析
__tag__:__receive_time__
字段,可使用语句*| select "__tag__:__receive_time__"
。在分析字段前,必须先创建字段索引。具体操作,请参见手动创建字段索引。
No nodes available to run query
报错原因
系统内部错误。
解决方法
请刷新页面,重新执行查询和分析语句。