代码之家  ›  专栏  ›  技术社区  ›  yazz.com

如何在二郎用get_slice从Cassandra获得属性?

  •  1
  • yazz.com  · 技术社区  · 14 年前

    我正在使用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给出的:

    获取_props(k)->好的,c=Thrift_客户端:启动_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_

    1 回复  |  直到 14 年前
        1
  •  1
  •   Schildmeijer    14 年前

    默认情况下,初始化SlicePredicate对象。这将默认构造一个slicePredicate,其反转设置为false(与SQL语法比较:“order by desc”),计数设置为100(与SQL语法比较:限制为100),切片范围和列名称都设置为空(在erlang中未指定,因为“缺少”空值)。

    希望我的Java代码片段可以帮助您(示例获取所有列)。我想强调切片药物的创建和使用。

    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);
            }
        }