2010-03-08 17 views
5

En Cassandra, tengo el siguiente Familia Columna:¿Cómo inserto una fila con una columna TimeUUIDType en Cassandra?

<ColumnFamily CompareWith="TimeUUIDType" Name="Posts"/> 

Estoy tratando de insertar un registro en la forma siguiente utilizando una función generada generada por Thrift C++:

ColumnPath new_col; 
new_col.__isset.column = true; /* this is required! */ 
new_col.column_family.assign("Posts"); 
new_col.super_column.assign(""); 
new_col.column.assign("1968ec4a-2a73-11df-9aca-00012e27a270"); 
client.insert("Keyspace1", "somekey", new_col, "Random Value", 1234, ONE); 

Sin embargo, estoy poniendo el siguiente error: 'UUID debe ser exactamente 16 bytes'

incluso he intentado la CLI Cassandra con el siguiente comando:

set Keyspace1.Posts['somekey']['1968ec4a-2a73-11df-9aca-00012e27a270'] = 'Random Value' 

pero todavía me sale el siguiente error:

Exception null 
InvalidRequestException(why:UUIDs must be exactly 16 bytes) 
at org.apache.cassandra.thrift.Cassandra$insert_result.read(Cassandra.java:11994) 
at org.apache.cassandra.thrift.Cassandra$Client.recv_insert(Cassandra.java:659) 
at org.apache.cassandra.thrift.Cassandra$Client.insert(Cassandra.java:632) 
at org.apache.cassandra.cli.CliClient.executeSet(CliClient.java:420) 
at org.apache.cassandra.cli.CliClient.executeCLIStmt(CliClient.java:80) 
at org.apache.cassandra.cli.CliMain.processCLIStmt(CliMain.java:132) 
at org.apache.cassandra.cli.CliMain.main(CliMain.java:173) 

Respuesta

7

El ahorro es un protocolo binario; 16 bytes significa 16 bytes. "1968ec4a-2a73-11df-9aca-00012e27a270" es de 36 bytes. Necesitas que tu biblioteca te proporcione el formulario en bruto de 16 bytes.

No uso C++, pero "versión 1 uuid" es la cadena mágica para la que desea buscar google cuando busca una biblioteca que pueda hacer esto. http://www.google.com/search?q=C%2B%2B+version+1+uuid

Cuestiones relacionadas