我创建了一个列族,其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 回答
UUID的字节表示不是您调用
"44c32fe1-38a4-11e1-a06a-485d60c81a3e".getBytes()
时得到的(uuid是16个字节,此string.getBytes()是36个字节) . FAQ on the cassandra wiki有如何在java中执行所需操作的说明: