2010-04-25 2 views
1

Я использую Erlang для взаимодействия с Cassandra, и я не могу заставить команду get_slice возвращать список всех столбцов строки. Я использую:Как получить свойства из Кассандры с помощью get_slice в Эрланге?

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-кли это работает отлично. Есть идеи?

Обновлено:

Я внес изменения в пример Erlang, чтобы отразить exmaple Java, данное:

get_props (K) -> {ОК, 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»), счетчик установлен в 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

+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

 Смежные вопросы

  • Нет связанных вопросов^_^