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



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

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

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

我有类似的问题,但 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.

但正如你所看到的,它也没有那么好用!

我希望这个答案有所帮助。

启动命令行界面

您可以使用 Cassandra 安装中的 bin/cassandra-cli 脚本启动 CLI(在 Windows 上的 bin\cassandra-cli.bat(。如果您正在评估本地 cassandra 节点,请确保在启动 CLI 之前已正确配置并成功启动该节点。

如果成功,您将看到类似于以下内容的输出:

Welcome to cassandra CLI.
Type 'help;' or '?' for help. Type 'quit;' or 'exit;' to quit.

然后,必须指定要连接到的系统:

connect localhost/9160;

创建密钥空间

我们首先创建一个键空间来运行我们的示例。

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

相关内容

最新更新