Как получить свойства у Кассандры с помощью get_slice в Эрланге? - PullRequest
1 голос
/ 25 апреля 2010

Я использую Erlang для взаимодействия с Cassandra, и я не могу заставить команду 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-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 {start = "", finish = "", полностью = ложно, count = 100}

1 Ответ

1 голос
/ 25 апреля 2010

Вы по умолчанию инициализируете свой объект SlicePredicate. По умолчанию будет создан SlicePredicate с обратным значением false (сравните с синтаксисом SQL: «ORDER by DESC»), счетчиком будет установлено значение 100 (сравните с синтаксисом SQL: LIMIT 100), а для slice_range и column_names будет установлено значение null (не указано в Erlang, потому что "недостаток" в нуле).

Надеюсь, мой фрагмент кода 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);
        }
    }
...