2010-04-25 8 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">> 

: 그러나,이 작품을 잘 카산드라 - CLI 인터페이스를 사용하여. 어떤 아이디어?

업데이트 :

get_props (K) -> {확인, C} = thrift_client :

내가 자바에 주어진 exmaple 반영하기 위해 얼랑 예 수정은 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을

답변

1

당신은 당신의 SlicePredicate 객체를 초기화하는 기본이다 {= 시작 ""마무리 = ""= 거짓 반전 = 100 count} 개. 이 옵션은 기본적으로 SQL 문법 : "ORDER BY DESC"과 비교하여 (SQL 문법 : LIMIT 100과 비교할 때) 100으로 설정되고 slice_range와 column_names가 모두 NULL로 설정된 false로 설정된 역순으로 SlicePredicate를 구성합니다 (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

+0

timeout ... ('K'키에 대해) 얼마나 많은 열이 돌아올 것으로 예상합니까? 수백만? – Schildmeijer

+0

2 개의 열. cassandra-cli에서 나는 돌아왔다. cassandra> get Keyspace1.KeyValue [ 'name'] => (column = value, value = zubair2, timestamp = 1) => (column = user, value = root, timestamp = 1272193083806000) – Zubair

관련 문제