2

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

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

4

3 回答 3

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).
于 2014-04-05T15:03:10.580 回答
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.

但正如你所见,它并没有很好地工作!

我希望这个答案有帮助。

于 2015-07-09T08:31:03.767 回答
-1

启动 CLI

您可以使用 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';
于 2014-03-03T08:46:43.010 回答