我在Cassandra尝试了我的第一个'Helloworld'应用程序。每当我尝试将任何数据添加到我的键空间列族时,我都会收到此错误:
[default@MyKeyspace] set User['ehewitt'] ['fname']='Eben';
org.apache.cassandra.serializers.MarshalException: cannot parse 'fname' as hex bytes
尽管我已经执行了
[default@MyKeyspace] assume Users keys as utf8;
所以上面的命令似乎根本没有任何效果。我该如何解决这个问题?
答案 0 :(得分:2)
Cassandra假设列为字节。
检查
help assume;
assume User keys as ascii;
assume User comparator as ascii;
assume User validator as ascii;
assume User sub_comparator as ascii;
set User['ehewitt']['fname']='Eben';
Value inserted.
Elapsed time: 216 msec(s).
答案 1 :(得分:0)
我有类似的问题,但是cli告诉我,这个值是无法解析的。
set game_outcome['1']['userId']='123asdasd';
cannot parse '123asdasd' as hex bytes
所以我尝试使用这样的utf8函数:
set game_outcome['1']['userId']=utf8('123asdasd');
cannot parse '123asdasd' as hex bytes
尝试
set User['ehewitt'] [utf8('fname')]='Eben'
我试着像这样设置一些假设
assume validator keys as utf8;
validator not found in current keyspace.
但是你可以看到它不起作用!
我希望这个答案有所帮助。
答案 2 :(得分:-1)
启动CLI
您可以使用Cassandra安装中的bin / cassandra-cli脚本(Windows上的bin \ cassandra-cli.bat)启动CLI。如果您正在评估本地cassandra节点,请确保在启动CLI之前已正确配置并成功启动它。
如果成功,您将看到类似于此的输出:
Welcome to cassandra CLI.
Type 'help;' or '?' for help. Type 'quit;' or 'exit;' to quit.
然后,您必须指定要连接到的系统:
connect localhost/9160;
创建Keyspace
我们首先创建一个键空间来运行我们的示例。
create keyspace Twissandra;
为用户选择键空间
然后我们必须选择我们的示例键空间作为新的上下文,然后才能运行任何查询。
use Twissandra;
创建列
然后我们可以创建一个要播放的列。
create column family User with comparator = UTF8Type;
要使后面的示例起作用,还必须使用以下命令更新架构。这将设置名字和姓氏的返回类型,使其具有人类可读性。它还将为年龄字段添加和索引,以便您使用“用户名”字段过滤获取。
update column family User with
column_metadata =
[
{column_name: first, validation_class: UTF8Type},
{column_name: last, validation_class: UTF8Type},
{column_name: age, validation_class: UTF8Type, index_type: KEYS}
];
添加数据
要将我们想要的数据添加到新列中,我们必须首先指定我们的默认密钥类型,否则我们必须使用格式[utf8('keyname')为每个密钥指定它。如果你有混合,这可能是可取的关键类型,但使简单的案例更难阅读。
所以我们运行下面的命令,这将持续你cli会话的长度。在退出并重新启动时,我们必须再次运行它。
assume User keys as utf8;
然后我们添加我们的数据。
set User['jsmith']['first'] = 'John';
set User['jsmith']['last'] = 'Smith';
set User['jsmith']['age'] = '38';
如果你得到这样的错误,不能将'John'解析为十六进制字节,那么你可能没有设置默认密钥类型,或者你没有像创建列示例那样更新你的模式。
更新数据
如果我们需要更新一个值,我们只需再次设置它。
set User['jsmith']['first'] = 'Jack';
获取数据
现在让我们读回jsmith行以查看它包含的内容:
get User['jsmith'];
get命令使用API#get_slice
查询数据
get User where age = '12';