2010-03-08 4 views
5

In Cassandra, ich habe die folgende Spalte Familie:Wie füge ich eine Zeile mit einer TimeUUIDType-Spalte in Cassandra ein?

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

Ich versuche, einen Datensatz in sie einzufügen, wie durch Thrift eine C++ generierte Funktion erzeugt folgt verwendet:

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); 

aber ich, sind die folgenden Fehler erhalten:

ich auch mit dem folgenden Befehl der Cassandra CLI versucht habe, ‚UUID muss genau 16 Byte sein‘:

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

aber ich habe immer noch die folgende Fehlermeldung:

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) 

Antwort

7

Thrift ist ein binäres Protokoll; 16 Bytes bedeuten 16 Bytes. "1968ec4a-2a73-11df-9aca-00012e27a270" ist 36 Bytes. Sie müssen Ihre Bibliothek erhalten, um Ihnen das rohe 16-Byte-Formular zu geben.

Ich benutze nicht C++ selbst, aber "Version 1 Uuid" ist die magische Zeichenfolge, nach der Sie googeln möchten, wenn Sie nach einer Bibliothek suchen, die das tun kann. http://www.google.com/search?q=C%2B%2B+version+1+uuid

Verwandte Themen