2010-04-25 13 views
1

我正在使用Erlang與Cassandra進行接口,而且我無法獲取get_slice命令以返回一行中所有列的列表。我使用:如何使用Erlang中的get_slice獲取Cassandra的屬性?

X = thrift_client:call(C, 
      'get_slice', 
      [ "Keyspace1", 
      K, 
      #columnParent{column_family="KeyValue"}, 
      #slicePredicate{}, 
      1 
      ]), 

:但我得到的結果:

invalidRequestException,<<"predicate column_names and slice_range may not both be null">> 

:但是,在使用Cassandra的-CLI界面能正常工作。有任何想法嗎?

更新:

予修正Erlang的例子,以反映給定的Java〔實施例:

get_props(K) - > {OK,C} = thrift_client:START_LINK( 「127.0.0.1」,9160 ,cassandra_thrift),

 S = #sliceRange{start="",finish="",reversed=false,count=100}, 
     X = thrift_client:call(C, 
       'get_slice', 
       [ "Keyspace1", 
       K, 
       #columnParent{column_family="KeyValue"}, 
       #slicePredicate{slice_range=S}, 
       1 
       ]), 
     X. 

:現在它工作。請注意添加行:

S = {#sliceRange開始= 「」,完成= 「」,顛倒=假,數= 100}

回答

1

您是默認初始化你SlicePredicate對象。這將默認構建一個SlicePredicate,並將其顛倒設置爲false(與SQL語法比較:「ORDER by DESC」),將count設置爲100(與SQL語法:LIMIT 100比較),並將slice_range和column_names設置爲null(在Erlang中未指定,因爲「缺乏」null)。

希望我的Java代碼片段可以幫助您(該示例提取所有列)。我想強調SlicePredicate的創建和使用。

private static void get_slice(Cassandra.Client client, String keyspace, 
      byte[] userI1, ColumnParent parent) { 

     SlicePredicate predicate = new SlicePredicate(); 
     SliceRange sliceRange = new SliceRange(); 
     sliceRange.setStart(new byte[0]); 
     sliceRange.setFinish(new byte[0]); 

     predicate.setSlice_range(sliceRange); 

     List<ColumnOrSuperColumn> results = 
      client.get_slice( 
       keyspace, 
       userI1, 
       parent, 
       predicate, 
       ConsistencyLevel.ONE 
     ); 

     for (ColumnOrSuperColumn cosc : results) { 
      System.out.println("column name:  " + new String(cosc.column.name)); 
      System.out.println("column value:  " + new String(cosc.column.value)); 
      System.out.println("column timestamp: " + cosc.column.timestamp); 
     } 
    } 
+0

謝謝。我已經更新了這個問題。無論如何,我再試一次,但它仍然無法正常工作。 – Zubair 2010-04-25 14:53:07

+0

超時...多少列(對於'K'關鍵字)你希望迴歸多少列?百萬? – Schildmeijer 2010-04-25 14:55:53

+0

2欄。在cassandra-cli中我回來了: cassandra> get Keyspace1.KeyValue ['name'] =>(column = value,value = zubair2,timestamp = 1) =>(column = user,value = root,timestamp = 1272193083806000) – Zubair 2010-04-25 14:58:48

相關問題