java - Apache Ignite SqlFieldQuery 位于存储 BinaryObject 的缓存之上

标签 java distributed-computing ignite gridgain

我似乎无法让它工作,并且在网上搜索文档或示例但无济于事

目标

BinaryObject 支持的 Ignite 缓存上运行简单的聚合查询值为 UUID作为关键

放置操作代码

IgniteBinary binary = ignite.binary();
            IgniteCache<UUID, BinaryObject> rowCache = ignite.getOrCreateCache(CACHE_NAME).withKeepBinary();

            // put

            final int NUM_ROW = 100000;
            final int NUM_COL = 100;
            for (int i = 0; i < NUM_ROW; i++) {
                BinaryObjectBuilder builder = binary.builder(ROW);
                for (int j = 0; j < NUM_COL; j++) {
                    builder.setField("col" + j, Math.random(), Double.class);
                }
                BinaryObject obj = builder.build();
                rowCache.put(UUID.randomUUID(), obj);
            }
          

读取操作代码

IgniteCache<UUID, BinaryObject> cache = ignite.cache(CACHE_NAME).withKeepBinary();
final SqlFieldsQuery sqlFieldsQuery = new SqlFieldsQuery("SELECT COUNT(col1)" + cache.getName());
FieldsQueryCursor<List<?>> result = cache.query(sqlFieldsQuery);

错误

org.h2.jdbc.JdbcSQLException: Column "COL1" not found; SQL statement

编辑

我已经添加了 QueryEntity到缓存配置使问题消失

 final QueryEntity queryEntity = new QueryEntity();
        queryEntity.setTableName(CACHE_NAME);
        queryEntity.setKeyFieldName("key");
        queryEntity.setKeyType(String.class.getName());
        queryEntity.setValueType(Row.class.getName());
        LinkedHashMap<String, String> fields = new LinkedHashMap<>();
        fields.put("key", String.class.getName());
        for (int i = 0; i < 55; i++) {
            fields.put("col" + i, Double.class.getName());
        }
        queryEntity.setFields(fields);
        return queryEntity;

但是,我不清楚如何 QueryEntitysetValueTypesetValueFieldName做?我的值类型是具有任意键、值的任意 Binary 对象

我想通过fields.put(<colName>, <colType>);声明这些...

我可以使用 POJO 让一切正常工作,但不能 BinaryObject作为值类型

我是不是做错了什么?

最佳答案

new SqlFieldsQuery("SELECT COUNT(col1)" + cache.getName())

缓存名称是架构名称,类名称(Row)是表名称。您的表名称似乎不正确。

还要确保 binary.builder(ROW) 中的 ROW 等于 QueryEntity.valueType

关于java - Apache Ignite SqlFieldQuery 位于存储 BinaryObject 的缓存之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45392074/

相关文章:

distributed-computing - Messenger 如何在聊天期间和用户再次登录时保持消息的顺序?

java - 卡夫卡 : move partition from invalid broker

java - Apache Ignite ML 和 DL 中的 Xgboost 和 LSTM 支持

java - 从 java 运行 Bash 不起作用

java数组列表格式

java - 如何根据对象的实例进行重载?

arrays - Erlang:阵列上的分布式工作

java - 点燃缓存错误

java - 使用 SSLContext.getDefault() 在 Spring 使用 SSL 设置 Ignite 集群

java - 为什么 Spring 框架叫 "non-intrusive"?