Как я могу выполнить запрос, когда столбец comptor_type находится в LexicalUUIDType? - PullRequest
0 голосов
/ 06 января 2012

Я создал семейство столбцов с Comparator_type = "LexicalUUIDType", Default_validation_class = "UTF8Type" и Key_validation_class = "UTF8Type".

И установите TimeUUID как 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:

    => (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 голос
/ 06 января 2012

Представление UUID в байтах - это не то, что вы получаете при вызове "44c32fe1-38a4-11e1-a06a-485d60c81a3e".getBytes() (значение uuid составляет 16 байт, это string.getBytes () - 36 байт). FAQ на cassandra wiki содержит инструкции, как делать то, что вы хотите в Java:

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