1

アーランを使用して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インターフェイスを使用すると、これは正常に機能します。何か案は?

更新しました:

以下に与えられたJavaの例を反映するようにErlangの例を修正しました:

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 = ""、reversed = false、count = 100}

4

1 に答える 1

1

デフォルトで SlicePredicate オブジェクトを初期化しています。これはデフォルトで、reversed が false に設定され (SQL 構文: "ORDER by DESC" と比較)、count が 100 に設定され (SQL 構文: LIMIT 100 と比較)、slice_range と column_names の両方が null に設定された (Erlang では指定されていない) SlicePredicate を構築します。 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);
        }
    }
于 2010-04-25T14:45:21.713 に答える