如何在Cassandra中插入带有TimeUUIDType列的行?

时间:2010-03-08 07:10:25

标签: cassandra uuid thrift

在Cassandra,我有以下专栏系列:

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

我正在尝试使用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);

但是,我收到以下错误:“UUID必须正好是16个字节”

我甚至使用以下命令尝试了Cassandra CLI:

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

但我仍然收到以下错误:

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)

1 个答案:

答案 0 :(得分:7)

Thrift是一种二进制协议; 16个字节表示16个字节。 “1968ec4a-2a73-11df-9aca-00012e27a270”是36个字节。你需要让你的库给你原始的16字节表格。

我自己不使用C ++,但“版本1 uuid”是您在寻找可以执行此操作的库时想要谷歌的神奇字符串。 http://www.google.com/search?q=C%2B%2B+version+1+uuid