首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cassandra Hector API结果对象

Cassandra Hector API结果对象
EN

Stack Overflow用户
提问于 2012-05-25 12:09:47
回答 1查看 1.4K关注 0票数 1

我在卡桑德拉数据库里做查询。我想在superColumn中的单个列中检索数据,该列位于superColumn中.有点复杂,但我需要它来建模我的数据库。

我使用了赫克托的文档:http://www.datastax.com/sites/default/files/hector-v2-client-doc.pdf

但是,当我尝试读取单个列时,这个文档的目的是使用以下方法:

代码语言:javascript
复制
    <code>ColumnQuery<String, String, String> columnQuery =
HFactory.createStringColumnQuery(keyspace);
columnQuery.setColumnFamily("Standard1").setKey("jsmith").setName("first");
Result<HColumn<String, String>> result = columnQuery.execute(); </code>

但是,什么是“结果”?我在google上搜索,我发现结果是一个对象结果,但是我有所有的库,没有人知道这个对象。

我用QueryResult替换结果,但是,当我启动main类时,我得到了以下错误:

me.prettyprint.hector.api.exceptions.HInvalidRequestException: me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:45) at me.prettyprint.cassandra.service.KeyspaceServiceImpl$23.execute(KeyspaceServiceImpl.java:851) at me.prettyprint.cassandra.service.KeyspaceServiceImpl$23.execute(KeyspaceServiceImpl.java:1) at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:103)上的

InvalidRequestException(原因:supercolumn参数对于超级CF Super2不是可选的)在me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:258) at me.prettyprint.cassandra.service.KeyspaceServiceImpl.operateWithFailover(KeyspaceServiceImpl.java:131) at me.prettyprint.cassandra.service.KeyspaceServiceImpl.getColumn(KeyspaceServiceImpl.java:857) at me.prettyprint.cassandra.model.thrift.ThriftColumnQuery$1.doInKeyspace(ThriftColumnQuery.java:57) at me.prettyprint.cassandra.model.thrift.ThriftColumnQuery$1.doInKeyspace(ThriftColumnQuery.java:1) at me.prettyprint.cassandra.model.KeyspaceOperationCallback.doInKeyspaceAndMeasure(KeyspaceOperationCallback.java:20) at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecute(ExecutingKeyspace.java:85) at me.prettyprint.cassandra.model.thrift.ThriftColumnQuery.execute(ThriftColumnQuery.java:52) at com.riptano.cassandra.hector.example.InsertSuperColumn.main(InsertSuperColumn.java:74)由:InvalidRequestException(为什么:supercolumn参数对于超级CF Super2不是可选的)在org.apache.cassandra.thrift.Cassandra$get_result.read(Cassandra上引起的在org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) at org.apache.cassandra.thrift.Cassandra$Client.recv_get(Cassandra.java:505) at org.apache.cassandra.thrift.Cassandra$Client.get(Cassandra.java:490) at me.prettyprint.cassandra.service.KeyspaceServiceImpl$23.execute(KeyspaceServiceImpl.java:846) . 11

当我聚焦于导致此错误的行时,它是一行:

代码语言:javascript
复制
**QueryResult<HColumn<String, String>> result5 = result3.execute();**

在这里,我用QueryResult代替结果。

我该怎么解决呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-29 17:46:42

我看到了几个问题..。

首先--“superColumn中的单个列中的数据,superColumn中的数据”。你不能这么做。您可以在superColumns中有列,但是只有一个层次的嵌套。无论是哪种方式,我都建议根本不使用superColumns,它们是Cassandra正在向Composite倾斜的东西。看看你是否可以调整你的数据模型来代替使用复合材料。

现在,转到您的代码。您正在对需要使用supercolumn...you的SuperColumnQuery进行常规列查询。SuperColumnQuery采用4种类型的参数--键、超级名称、col和值类型。您还可以得到一个QueryResult对象,而不是结果。本例中的QueryResult对象包含一个SuperColumn,该SuperColumn依次包含一个列集合。

所以看起来就像..。

代码语言:javascript
复制
    SuperColumnQuery<String, String, String, String> superColumnQuery = 
    HFactory.createSuperColumnQuery(ksp);
    superColumnQuery.setColumnFamily("Standard1").setKey("jsmith").setSuperName("first");
    QueryResult<HSuperColumn<String, String, String>> queryResult = superColumnQuery.execute();

    if (queryResult != null && queryResult.get() != null) {
        List<HColumn<String, String>> resultCols = queryResult.get().getColumns();
        for (HColumn<String, String> col : resultCols) {
            doSomething(col.getValue());
        }
    }

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10754181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档