首页 文章

当列compare_type在LexicalUUIDType中时,如何执行查询?

提问于
浏览
0

我创建了一个列族,其Comparator_type =“LexicalUUIDType”,Default_validation_class =“UTF8Type”和Key_validation_class =“UTF8Type” .

并在上面的列族中将TimeUUID设置为column_name . 它的插入运行得非常好,但我怎样才能获得列?我无法设置正确的column_name!以下是代码:

ColumnPath path = new ColumnPath();
    path.setColumn_family("test");
    path.setColumn(("44c32fe1-38a4-11e1-a06a-485d60c81a3e".getBytes()));
    ColumnOrSuperColumn or = new ColumnOrSuperColumn();
    try {
        or = client.get(ByteBuffer.wrap("key").getBytes()), path, ConsistencyLevel.ONE);
    } catch (InvalidRequestException e) {
       ...

Cassandra DB中的数据:

=> (column=44c32fe0-38a4-11e1-a06a-485d60c81a3e, value=32, timestamp=1325881397726)
    => (column=44c32fe1-38a4-11e1-a06a-485d60c81a3e, value=33, timestamp=1325881397726)
    => (column=44c32fe2-38a4-11e1-a06a-485d60c81a3e, value=34, timestamp=1325881397727)
    => (column=44c37e00-38a4-11e1-a06a-485d60c81a3e, value=35, timestamp=1325881397728)
    => (column=44c37e01-38a4-11e1-a06a-485d60c81a3e, value=36, timestamp=1325881397728)
    ...

和异常信息:

InvalidRequestException(why:LexicalUUID should be 16 or 0 bytes (36))
    at org.apache.cassandra.thrift.Cassandra$get_result.read(Cassandra.java:6490)
    at org.apache.cassandra.thrift.Cassandra$Client.recv_get(Cassandra.java:519)
    at org.apache.cassandra.thrift.Cassandra$Client.get(Cassandra.java:492)
    at test.cassandra.MainTest.query(MainTest.java:118)
    ...

这就是为什么?我现在无法执行单个查询或切片查询 . 如何使用uuid按键和列名执行查询?预先感谢!

1 回答

  • 1

    UUID的字节表示不是您调用 "44c32fe1-38a4-11e1-a06a-485d60c81a3e".getBytes() 时得到的(uuid是16个字节,此string.getBytes()是36个字节) . FAQ on the cassandra wiki有如何在java中执行所需操作的说明:

    java.util.UUID.fromString("44c32fe1-38a4-11e1-a06a-485d60c81a3e");
    

相关问题