使用 DML 插入数据后无法按分区索引扫描查询数据
Failed to Scan query data by partition index after insert data using DML
我尝试通过分区索引查询数据,当我使用缓存插入数据时API,我可以成功获取数据,当我使用DML插入数据时,我无法获取数据。
我可以使用分区索引使用缓存获取数据API
IgniteCache cache = ignite.getOrCreateCache("cacheName");
cache.put(1, "v1");
ScanQuery sq = new ScanQuery(1); //1 is the id of partition used to store entry created above
cache.query(sq).getAll();
我无法使用由 DML 插入的分区索引获取数据
IgniteCache cache = ignite.getOrCreateCache("tableName");
cache.query(new SqlFieldsQuery("CREATE TABLE tableName (id LONG PRIMARY KEY, name VARCHAR)")).getAll();
SqlFieldsQuery qry = new SqlFieldsQuery("INSERT INTO tableName (id, name) value (?,?)");
cache.query(qry.setArgs(11L, "Mary Major")).getAll();
ScanQuery sq = new ScanQuery(11); //11 is the id of partition used to store entry created above
cache.query(sq).getAll(); //nothing return here!
我尝试将 SQL_PUBLIC_TABLENAME 作为缓存名称,但出现异常:
java.lang.ClassNotFoundException: SQL_PUBLIC_TABLENAME_7b146bba_cd7f_452f_8abc
问:
如何使用分区索引查询 DML 插入的数据?谢谢
- 您不需要显式调用 createCache,因为 CREATE TABLE 也会创建缓存:
SQL_PUBLIC_TABLENAME
是正确的缓存名称。您可以使用 CREATE TABLE (...) WITH "cache_name=PreferredNameForCache"
对其进行自定义
- 如果你要有一个原始类型的单列值,你应该使用
CREATE TABLE (...) WITH "wrap_value=false"
。然后扫描查询也可以。
我尝试通过分区索引查询数据,当我使用缓存插入数据时API,我可以成功获取数据,当我使用DML插入数据时,我无法获取数据。
我可以使用分区索引使用缓存获取数据API
IgniteCache cache = ignite.getOrCreateCache("cacheName");
cache.put(1, "v1");
ScanQuery sq = new ScanQuery(1); //1 is the id of partition used to store entry created above
cache.query(sq).getAll();
我无法使用由 DML 插入的分区索引获取数据
IgniteCache cache = ignite.getOrCreateCache("tableName");
cache.query(new SqlFieldsQuery("CREATE TABLE tableName (id LONG PRIMARY KEY, name VARCHAR)")).getAll();
SqlFieldsQuery qry = new SqlFieldsQuery("INSERT INTO tableName (id, name) value (?,?)");
cache.query(qry.setArgs(11L, "Mary Major")).getAll();
ScanQuery sq = new ScanQuery(11); //11 is the id of partition used to store entry created above
cache.query(sq).getAll(); //nothing return here!
我尝试将 SQL_PUBLIC_TABLENAME 作为缓存名称,但出现异常: java.lang.ClassNotFoundException: SQL_PUBLIC_TABLENAME_7b146bba_cd7f_452f_8abc
问: 如何使用分区索引查询 DML 插入的数据?谢谢
- 您不需要显式调用 createCache,因为 CREATE TABLE 也会创建缓存:
SQL_PUBLIC_TABLENAME
是正确的缓存名称。您可以使用CREATE TABLE (...) WITH "cache_name=PreferredNameForCache"
对其进行自定义
- 如果你要有一个原始类型的单列值,你应该使用
CREATE TABLE (...) WITH "wrap_value=false"
。然后扫描查询也可以。