1

cassandraデータベースでクエリを実行しようとしています。superColumnにある単一のColumnでデータを取得したいのですが、これはsuperColumnにあります...少し複雑ですが、データベースをモデル化するために必要です。

Hectorのドキュメントを使用しました:http ://www.datastax.com/sites/default/files/hector-v2-client-doc.pdf

しかし、私が単一の列を読み込もうとすると、このドキュメントはこのメソッドを使用することを目的としています:

    <code>ColumnQuery<String, String, String> columnQuery =
HFactory.createStringColumnQuery(keyspace);
columnQuery.setColumnFamily("Standard1").setKey("jsmith").setName("first");
Result<HColumn<String, String>> result = columnQuery.execute(); </code>

しかし、「結果」とは何ですか?グーグルで検索すると、結果がオブジェクトResultであることがわかりましたが、私はすべてのライブラリを持っており、誰もこのオブジェクトを知りません。

ResultをQueryResultに置き換えましたが、クラスmainを起動すると、次のエラーが発生しました。

me.prettyprint.hector.api.exceptions.HInvalidRequestException:me.prettyprintのme.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:45)のInvalidRequestException(スーパーCF Super2ではスーパーカラムパラメーターがオプションではない理由)。 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)at 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(why:supercolumnパラメーターはスーパーCF Super2ではオプションではありません) org.apache.cassandra.thrift.Cassandra $ get_result.read(Cassandra.java:5930)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詳細

このエラーの原因となる行に焦点を合わせると、その行は次のようになります。

**QueryResult<HColumn<String, String>> result5 = result3.execute();**

ここで、ResultをQueryResultに置き換えます。

どうすれば解決できますか?

4

1 に答える 1

1

ここにいくつかの問題があります...

最初-「superColumnにあるsuperColumnにある単一の列のデータ」。あなたはそれをすることはできません。superColumnsに列を含めることができますが、ネストのレベルは1つだけです。いずれにせよ、superColumnsはまったく使用しないことをお勧めします。これは、CassandraがCompositeColumnsを優先して移行しているものです。代わりにコンポジットを使用するようにデータモデルを調整できるかどうかを確認してください。

次に、コードに移動します。スーパーカラムで通常のカラムクエリを実行しています...SuperColumnQueryを使用する必要があります。SuperColumnQueryは、キー、スーパー列名、列名、値型の4つの型パラメーターを取ります。また、結果ではなく、QueryResultオブジェクトを取得します。この場合のQueryResultオブジェクトには、列のコレクションを含むSuperColumnが含まれています。

だからそれは次のように見えます...

    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());
        }
    }

お役に立てれば!

于 2012-05-29T17:46:42.380 に答える