1

私のデータ保存形式は次のとおりです。

Family name :Test
Rowkey: comkey1:comkey2
=>(name=name,value='xyz',timestamp=1554515485)
-------------------------------------------------------
Rowkey: comkey1:comkey3
=>(name=name,value='abc',timestamp=1554515485)
-------------------------------------------------------
Rowkey: comkey1:comkey4
=>(name=name,value='pqr',timestamp=1554515485)
-------------------------------------------------------

今、「テスト」ファミリーからすべての複合キーを取得したいので、試しています

def test=Action{

val cluster = HFactory.getOrCreateCluster("Test Cluster", "127.0.0.1:9160");
val keyspace = HFactory.createKeyspace("winoriatest", cluster)
var startKey = new Composite();
var endKey= new Composite();
startKey.addComponent("comkey1", StringSerializer.get());
startKey.addComponent("comkey2", StringSerializer.get());
endKey.addComponent("comkey1", StringSerializer.get());
endKey.addComponent("comkey4", StringSerializer.get());

val rangeSlicesQuery = HFactory.createRangeSlicesQuery(keyspace, CompositeSerializer.get(), StringSerializer.get(),StringSerializer.get())
rangeSlicesQuery.setColumnFamily("test");
// CompositeSerializer.get() is not working.
rangeSlicesQuery.setKeys(startKey,endKey)
rangeSlicesQuery.setRange(null,null,false,Integer.MAX_VALUE);
rangeSlicesQuery.setReturnKeysOnly()
val result = rangeSlicesQuery.execute()
val orderedRows = result.get();
import scala.collection.JavaConversions._
for (sc <- orderedRows) {
  println(sc.getKey())
  }
Ok(views.html.index("Your new application is ready."))
}

エラー: [NullPointerException: null] 行上

val result = rangeSlicesQuery.execute() 

Cassandra 2.0 scala 2.10.2 この問題の解決にご協力いただきありがとうございます。

それは私にヌルポインタ例外を与え、同じコードがJavaで動作して
おり、私のJavaコードは

Cluster cluster = HFactory.getOrCreateCluster("Test Cluster","127.0.0.1:9160");
Keyspace keyspace = HFactory.createKeyspace("winoriatest", cluster);
Serializer<String> se= StringSerializer.get() ;
Serializer<Long> le= LongSerializer.get() ;
Serializer<Integer> ie= IntegerSerializer.get() ;
CompositeSerializer ce = new CompositeSerializer();
RangeSlicesQuery<Composite,String,byte[]>     rangeSliceQuery=HFactory.createRangeSlicesQuery(keyspace,ce,se, BytesArraySerializer.get());
rangeSliceQuery.setColumnFamily("test");
rangeSliceQuery.setRange(null,null, false, Integer.MAX_VALUE);
QueryResult<OrderedRows<Composite,String,byte[]>>result=rangeSliceQuery.execute();
OrderedRows<Composite,String,byte[]> orderedRows=result.get();
for (Row<Composite,String,byte[]> r:orderedRows)
    {
    System.out.println("Compositekey="+r.getKey().get(0,se)+":"+r.getKey().get(1, se));
}    
4

1 に答える 1

3

「テストファミリーのすべての複合キーを取得したい」が何を意味するのかよくわかりません。つまり、パーティション [行] キー コンポーネントだけを取得したい場合は、CQL で次のように簡単に実行できます。

SELECT DISTINCT a, b FROM テスト

(abを列名に割り当てます。)

これは、CQL によって Cassandra の開発がいかに簡単になったかを示す好例です。Hector のようなレガシー クライアントではなく、ネイティブ CQL ドライバーを使用するよう人々に勧めているのはそのためです。

CQL がこのような Thrift データ モデルをどのように理解するかについて詳しくは、http: //www.datastax.com/dev/blog/cql3-for-cassandra-experts を参照してください。

于 2013-10-21T03:49:42.863 に答える