文档

错误信息

更新时间:

当调用API/SDK使用表格存储功能时可能会出现一些报错信息。本文介绍了常见错误信息的解决方案。

错误信息

可能原因

解决方案

相关功能文档

java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED

一般是由于OTSClient被调用了shutdown,其内部的I/O reactor均已被关闭。

调用的OTSClient不能处于shutDown状态。如果调用的OTSClient已处于shutDown状态,请重新初始化OTSClient后再进行操作。

初始化OTSClient

java.lang.UnsupportedOperationException: This is supposed to be overridden by subclassed

表格存储Java SDK依赖2.4.1版本的Protobuf库和4.0.2版本的httpasyncclient,容易与您的应用程序中自带的相同库冲突。

在Maven项目中的pom.xml中添加如下依赖即可。

说明

classifier为jar-with-dependencies,它将依赖的HttpClient和Protobuf库都通过rename package的方式打包进去,去除了对HttpClient和Protobuf的依赖。

<dependency>
    <groupId>com.aliyun.openservices</groupId>
    <artifactId>tablestore</artifactId>
    <version>替换为您当前使用的版本</version>
    <classifier>jar-with-dependencies</classifier>
    <exclusions>
        <exclusion>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpasyncclient</artifactId>
        </exclusion>
    </exclusions>
</dependency>    

安装表格存储Java SDK

The count of attribute columns exceeds the maximum:128

在向表格存储数据表写入数据时,一行最多支持写入1024列。在使用TableStoreWriter的过程中,客户端会有一个默认写入128列的限制。

使用Java SDK构造TableStoreWriter客户端时,您可以通过修改MaxColumnsCount参数来适当调大一行默认写入的列数。

使用TableStoreWriter进行高并发、高吞吐的数据写入

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

带有通配符的字符串长度超过32字节。

使用通配符查询时,要匹配的值可以是一个带有通配符的字符串,带有通配符的字符串长度不能超过32字节,请替换查询字符串。

通配符查询

field:xx must enable enable_sort_and_agg

创建多元索引时没有为对应字段开启排序与统计聚合(即enable_sort_and_agg=true)功能。

请通过多元索引的动态修改schema功能来为要使用的字段开启排序与统计聚合功能。具体操作,请参见动态修改schema

[bool_query] sub query must not be null

查询条件中的子查询条件为空,未配置必选参数。

您需要自行排查代码中查询条件的相关参数配置,请确保已正确配置查询条件中的所有子查询条件。

重要

如果自行排查代码后问题仍未解决,请加入钉钉群23307953(表格存储技术交流群-2)或36165029092(表格存储技术支持群-3)联系我们。

多条件组合查询

can't set [sort] when [token] is not null

在使用token翻页时设置了sort。

通过多元索引查询数据使用token进行翻页时,token中已编码了排序字段,无需再额外设置sort。

排序和翻页

[table ttl] must be bigger than or equal search index ttl

数据表上存在多元索引,数据表的TTL必须大于或等于多元索引的TTL。

当要调整数据表TTL时,请确认所需数据表TTL是否小于多元索引TTL。

  • 如果所需数据表TTL小于多元索引TTL,请同时调小多元索引TTL和数据表TTL,此时需要先调整多元索引TTL,再调整数据表TTL。

  • 如果所需数据表TTL大于或等于多元索引TTL,请直接进行修改。

The sql scanned rows of main table exceeds the quota, main table rows quota is 100000

如果使用SQL查询数据时使用的条件为非分区键,则会造成全表扫描数据,可能会出现扫描到的行数或者数据量超过限制的情况。

重要

目前SQL单次扫描支持的最大行数为100000行,最大数据量为128 MB,最长时间为30秒。

使用SQL查询数据时,请确保查询条件包含主键列且符合最左匹配原则,并为SQL语句添加limit参数来控制返回的行数。

如果查询条件不满足上述条件,您还可以通过如下方式进行查询加速。更多信息,请参见索引选择策略

  • 如果通过创建二级索引即可满足查询条件包含主键列且符合最左匹配原则,则建议您创建二级索引进行查询加速。更多信息,请参见二级索引介绍

  • 如果查询条件中包括聚合函数(例如count、sum、avg)、group by或者基于非主键的过滤查询,则建议创建多元索引进行查询加速。更多信息,请参见多元索引介绍

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

使用SQL查询数据

Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]

缺少javassist-x.x.x.jar包。

您可以通过以下两种方式安装javassist-x.x.x.jar包。

  • 下载javassist安装包(即javassist-x.x.x.jar)并导入到项目中。具体下载路径请参见javassist安装包。 javassist-x.x.x.jar中的x.x.x表示javassist的版本号,请根据实际下载所需版本的安装包。

  • 在Maven项目中加入依赖项

    在Maven工程的pom.xml中加入相应依赖即可。此处以3.15.0-GA版本为例,在<dependencies>内加入如下内容:

    <!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
    <dependency>
        <groupId>org.javassist</groupId>
        <artifactId>javassist</artifactId>
        <version>3.15.0-GA</version>
    </dependency>

通过Hibernate使用SQL查询数据

Disallow read index table in building base state

二级索引的存量构造需要对表中的存量数据进行读取,然后同步到索引表。在存量数据同步完成之前,不允许读索引表,当存量数据同步完成,可以正常读取索引表。存量数据同步时间与数据表的数据量大小相关。

等待二级索引存量数据构造和同步完成后再进行数据读取。

Checksum mismatch

表格存储的整型是64位的,而32位PHP只能用string表示64位的整型,所以暂不支持32位PHP;且Windows系统中PHP 7之前版本的整型不是真正的64位。

在Windows系统中使用表格存储PHP SDK时,PHP版本必须使用PHP 7及PHP 7以上的64位版本,强烈建议使用PHP 7以获得最佳性能。

通过phpinfo()查看PHP配置信息中的Architecture类型,可以判断PHP版本是否满足使用要求。

安装