全部產品
Search
文件中心

Tablestore:錯誤資訊

更新時間:Oct 16, 2024

當調用 API/SDK 使用Table Store功能時可能會出現一些報錯資訊。本文介紹了常見錯誤資訊的解決方案。

錯誤資訊

可能原因

解決方案

相關功能文檔

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

Table Store 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>    

安裝Table Store Java SDK

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

查詢條件中的子查詢條件為空白,未配置必選參數。

您需要自行排查代碼中查詢條件的相關參數配置,請確保已正確配置查詢條件中的所有子查詢條件。

多條件組合查詢

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

Table Store的整型是 64 位元的,而 32 位 PHP 只能用 string 表示 64 位元的整型,所以暫不支援 32 位 PHP;且 Windows 系統中 PHP 7 之前版本的整型不是真正的 64 位元。

在 Windows 系統中使用Table Store PHP SDK 時,PHP版本必須使用 PHP 7 及以上的 64 位元版本,強烈建議使用 PHP 7 以獲得最佳效能。

通過 phpinfo() 查看PHP配置資訊中的 Architecture 類型,可以判斷 PHP 版本是否滿足使用要求。

安裝Table Store PHP SDK