Как вставить строку со столбцом TimeUUIDType в Cassandra?
В Кассандре у меня есть следующее семейство столбцов:
<ColumnFamily CompareWith="TimeUUIDType" Name="Posts"/>
Я пытаюсь вставить запись в нее следующим образом, используя сгенерированную функцию C++, сгенерированную Thrift:
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 байтов"
Я даже попробовал CLI Cassandra с помощью следующей команды:
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 ответ
Решение
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