2012-01-06 3 views
0

Comparator_type = "LexicalUUIDType", Default_validation_class = "UTF8Type"및 Key_validation_class = "UTF8Type"인 열 패밀리를 만들었습니다.comparison_type 열이 LexicalUUIDType 일 때 어떻게 쿼리를 실행할 수 있습니까?

위의 열 패밀리에서 TimeUUID를 column_name으로 설정하십시오. 삽입이 잘 실행되지만 열을 어떻게 얻을 수 있습니까? 올바른 column_name을 설정할 수 없습니다! 카산드라 DB에서

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) { 
     ... 

데이터 :

=> (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.util.UUID.fromString("44c32fe1-38a4-11e1-a06a-485d60c81a3e"); 
관련 문제