SQL查询常见错误排查

本文介绍使用SQL查询时的常见错误处理方法,主要包括OTSUnsupportOperation、OTSQuotaExhausted、OTSParameterInvalidOtsRequestTimeout四种类型的错误。

OTSUnsupportOperation错误

错误信息

描述

解决办法

Operation not supported

表格存储SQL目前覆盖部分SQL功能集合。当使用未支持的SQL语法时,系统会报错。

使用表格存储SQL支持的功能。

SQL功能会快速迭代,最新功能集合请以官网文档为准。更多信息,请参见SQL支持功能说明

如果您有特定SQL语法的使用需求,请加入钉钉群23307953(表格存储技术交流群-2)或36165029092(表格存储技术交流群-3)进行咨询。

text_match is only supported for TEXT field in filter conditions in search index

全文检索函数使用错误。全文检索函数(text_matchtext_match_phrase)必须使用在多元索引中的TEXT类型字段,并且只能出现在过滤条件中。

确保正确地使用全文检索功能。更多信息,请参见全文检索

text_match_phrase is only supported for TEXT field in filter conditions in search index

OTSQuotaExhausted错误

错误信息

描述

解决办法

The sql scanned rows of kv exceeds the quota! Search quota is 100000 rows, table quota is 100000 rows

选择KV引擎作为查询引擎时扫描到的行数或者数据量超过限制。

使用二级索引或者多元索引加速数据查询。更多信息,请参见索引选择策略

  • 通过多元索引加速查询

    如果查询中包括聚合函数(例如count、sum、avg)、group by或者基于非主键的过滤查询,建议配置多元索引进行查询加速。

    如果已配置多元索引仍出现该错误,建议检查多元索引是否包含所有查询时用到的字段。

  • 如果未配置多元索引,请确保查询条件包含主键列且符合最左匹配原则,并为SQL语句添加limit参数来控制返回的行数。

说明

目前扫描最大行数为100000行,扫描最大数据量为128 MB,扫描超时时间为30秒。

The sql scanned rows of search exceeds the quota! Search quota is 100000 rows, table quota is 100000 rows

选择多元索引引擎作为查询引擎时扫描到的行数或者数据量超限。

  • SQL语句添加limit参数来控制返回的行数。

  • 优化SQL语句中的查询条件,将部分SQL计算任务下推到多元索引执行。关于计算下推的更多信息,请参见计算下推

The sql duration time exceed the quota! Quota is 30 seconds

SQL运行超时。

使用二级索引或者多元索引加速数据查询。更多信息,请参见索引选择策略

  • 通过多元索引加速查询

    如果查询中包括聚合函数(例如count、sum、avg)、group by或者基于非主键的过滤查询,建议配置多元索引进行查询加速。

    如果已配置多元索引仍出现该错误,建议检查多元索引是否包含所有查询时用到的字段。

  • 如果未配置多元索引,请确保查询条件包含主键列且符合最左匹配原则,并为SQL语句添加limit参数来控制返回的行数。

OTSParameterInvalid错误

错误信息

描述

解决办法

Field type mismatch, actual: STRING, expect: INTEGER, col: xxx, primary key: {"PrimaryKeys":[{"ColumnName":"xxx","Value":"xxx","PrimaryKeyOption":0}]}

数据表中属性列的数据类型和SQL中属性列的数据类型不匹配。

表格存储数据表是Free-Schema的,允许在同一个属性列中写入多种类型的数据,但是SQLStrong-Schema的,每个字段必须具有特定的类型定义。

使用SQL时,请确保数据表中属性列的数据类型与SQL中属性列的数据类型相匹配。您可以根据报错信息修改数据表中指定行对应属性列的数据类型。

Table 'instancename.tablename' doesn't exist

创建映射关系时,指定的表不存在。

SQL中的Create Table语句只能为已存在的表或者多元索引创建映射关系。请确保要创建映射关系的表或者多元索引存在。更多信息,请参见创建表的映射关系创建多元索引的映射关系

Field type 'DECIMAL(11,0)' is not supported

SQL不支持数据类型DECIMAL。

SQL查询只支持部分数据类型。更多信息,请参见SQL数据类型映射

Search engine: length of field value is longer than 32 for the [WILDCARD_QUERY] query

LIKE条件的长度超过32个字符。

减少LIKE条件的字符个数。

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column

使用GROUP BY分组查询时,GROUP BY中未包含聚合函数。

SQL语句中添加聚合条件。更多信息,请参见查询数据

Offset + limit exceeds the quota! quota is 150000 rows

offset+limit超过最大限制。使用limit a,b表达式时,a+b超过最大限制。最大限制为150000。

确保offset+limit之和小于等于150000。

如果有更大offset+limit的使用需求,请加入钉钉群23307953(表格存储技术交流群-2)36165029092(表格存储技术交流群-3)进行咨询。

Unknown column 'xxx' in field list

SQL语句包含了映射表中不存在的字段名。

通常是由于创建映射表后,在数据表中新增了字段,但是未在对应映射表中添加新字段。

映射表中需要包含查询所需的字段。如果在数据表中新增了字段,请同时在对应映射表中添加新字段。具体操作,请参见更新映射表属性列

OtsRequestTimeout错误

错误信息

描述

解决办法

Search engine: search timeout, please retry

此次查询访问了多元索引且单次查询运行超时。

查看使用的查询特性是否需要在多元索引中配置预定义规则。

例如要使用ORDER BY功能,您可以在创建多元索引时配置索引预排序。如果已有多元索引的预排序方式不满足使用需求,您可以使用动态修改schema功能修改索引预排序。