gpt4 book ai didi

java - Cassandra 新手 - SliceQuery 给出错误没有足够的字节来读取组件 0 的值

转载 作者:行者123 更新时间:2023-12-02 03:47:22 24 4
gpt4 key购买 nike

我在尝试查询具有 2 列复合键的列族 (CF) 时遇到问题:comment_keyprattle_key

这是 CF 定义:

CREATE TABLE comments (
comment_key text,
prattle_key text,
parent_key text,
depth int,
author text,
date_created timestamp,
body text,
PRIMARY KEY (comment_key, prattle_key)
) WITH
comment='' AND
caching='KEYS_ONLY' AND
read_repair_chance=0.100000 AND
gc_grace_seconds=864000 AND
replicate_on_write='true' AND
compaction_strategy_class='SizeTieredCompactionStrategy' AND
compression_parameters:sstable_compression='SnappyCompressor';

这是我的 Java 代码:

Composite key = new Composite();
key.addComponent(prattleKey, StringSerializer.get());
key.addComponent(commentKey, StringSerializer.get());

SliceQuery<Composite, String, String> query = HFactory.createSliceQuery(keyspace, CompositeSerializer.get(), StringSerializer.get(), StringSerializer.get());

query.setColumnFamily("comments").setKey(key).setColumnNames("parent_key", "body", "depth", "date", "author");

QueryResult<ColumnSlice<String, String>> queryResult = query.execute();
ColumnSlice<String, String> cs = queryResult.get();

我收到以下错误消息:

InvalidRequestException(why:Not enough bytes to read value of component 0)

使用命令行 CQL 实用程序,我可以很好地选择 ColumnFamily 中的所有 3 行,因此我知道其中有数据。

任何帮助将不胜感激!谢谢!

最佳答案

当您使用复合主键时,第一个键用作行(或分区)键,其余主键用作非键列的列标题的一部分。例如,在您的情况下,CQL 列主体的列名称是由 prattle_key 值和字符串“body”的值组成的复合值。这也意味着一个列族行可以包含多个 CQL 行,这些行都具有相同的 comment_key 值但不同的 prattle_key 值。

我认为您得到的错误来自这样一个事实:您试图处理一个只有 comment_key 且复合类型具有两个组件的 rowkey 值。更改您的键值,使其只是 comment_key,并查找返回的第一个组件等于 prattle_key 值的列名称。

关于java - Cassandra 新手 - SliceQuery 给出错误没有足够的字节来读取组件 0 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com