Apache Iginte BinaryObject SqlFieldsQuery
Apache Iginte BinaryObject SqlFieldsQuery
有什么方法可以 运行 sql 在 apache ignite 上查询二进制对象的字段(没有定义 java class)?
我想执行这样的操作:
CacheConfiguration<Integer, Object> cfg = new CacheConfiguration<>();
cfg.setName("test_bo");
cfg.setIndexedTypes(Integer.class, BinaryObject.class);
IgniteCache<Integer, Object> cache = ignite.getOrCreateCache(cfg);
BinaryObjectBuilder builder = ignite.binary().builder(BinaryObject.class.getName());
BinaryObject object = builder.setField("xxx", "yyy").build();
cache.put(1, object);
List<Object[]> collect = cache.withKeepBinary().query(
new SqlFieldsQuery("select xxx from BinaryObject")).getAll().stream()
.map(list -> list.toArray(new Object[list.size()]))
.collect(Collectors.toList());
assertThat(collect).containsExactly(new Object[]{"yyy"});
但是我有一个异常,字段没有定义:
Caused by: org.h2.jdbc.JdbcSQLException: Column "XXX" not found; SQL statement: select xxx from BinaryObject [42122-175]
BinaryObject 是一个没有任何索引定义的接口。您需要在客户端将域 class 的确切 class 定义传递给 CacheConfiguration.setIndexedTypes(...)
,应该有 class 定义,Ignite 将收集有关索引的信息设置。
如果您根本没有 classes(即使在客户端),那么您可以直接使用 QueryEntity 定义索引,如 here.
所述
也没有必要让一个对象成为BinaryObject
的类型。您的对象将以这种格式自动存储在服务器端。唯一的例外是实现 Externalizable
或覆盖 Serializable.writeObject/readObject
方法的对象 - 这些对象可以以二进制格式存储,并且您必须在服务器端为它们定义 class 。 here.
提供了有关二进制格式的更多信息
最后,我建议您看一下作为 Ignite 版本的一部分提供的 CacheQueryExample。此示例中使用的对象模型以二进制格式存储。
有什么方法可以 运行 sql 在 apache ignite 上查询二进制对象的字段(没有定义 java class)?
我想执行这样的操作:
CacheConfiguration<Integer, Object> cfg = new CacheConfiguration<>();
cfg.setName("test_bo");
cfg.setIndexedTypes(Integer.class, BinaryObject.class);
IgniteCache<Integer, Object> cache = ignite.getOrCreateCache(cfg);
BinaryObjectBuilder builder = ignite.binary().builder(BinaryObject.class.getName());
BinaryObject object = builder.setField("xxx", "yyy").build();
cache.put(1, object);
List<Object[]> collect = cache.withKeepBinary().query(
new SqlFieldsQuery("select xxx from BinaryObject")).getAll().stream()
.map(list -> list.toArray(new Object[list.size()]))
.collect(Collectors.toList());
assertThat(collect).containsExactly(new Object[]{"yyy"});
但是我有一个异常,字段没有定义:
Caused by: org.h2.jdbc.JdbcSQLException: Column "XXX" not found; SQL statement: select xxx from BinaryObject [42122-175]
BinaryObject 是一个没有任何索引定义的接口。您需要在客户端将域 class 的确切 class 定义传递给 CacheConfiguration.setIndexedTypes(...)
,应该有 class 定义,Ignite 将收集有关索引的信息设置。
如果您根本没有 classes(即使在客户端),那么您可以直接使用 QueryEntity 定义索引,如 here.
所述也没有必要让一个对象成为BinaryObject
的类型。您的对象将以这种格式自动存储在服务器端。唯一的例外是实现 Externalizable
或覆盖 Serializable.writeObject/readObject
方法的对象 - 这些对象可以以二进制格式存储,并且您必须在服务器端为它们定义 class 。 here.
最后,我建议您看一下作为 Ignite 版本的一部分提供的 CacheQueryExample。此示例中使用的对象模型以二进制格式存储。