Cassandra:无法将<col_name>解析为十六进制字节:MarshallException </col_name>

时间:2013-10-10 04:22:22

标签: exception format cassandra

我在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;

所以上面的命令似乎根本没有任何效果。我该如何解决这个问题?

3 个答案:

答案 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';