Cassandra 字节不足,无法读取组件0的值-Hector复合列读取

Cassandra 字节不足,无法读取组件0的值-Hector复合列读取,cassandra,runtime-error,composite,hector,Cassandra,Runtime Error,Composite,Hector,在使用hector api读取复合列时遇到问题 我的专栏家庭: create column family step_wise_stats_cc with key_validation_class = 'CompositeType(UTF8Type, UTF8Type)' and comparator = UTF8Type and default_validation_class = UTF8Type; 数据: 行键:{TYPE-1,SUB-TYPE-1} 列:名称1:Value1 我是这样质疑

在使用hector api读取复合列时遇到问题

我的专栏家庭:

create column family step_wise_stats_cc with key_validation_class = 'CompositeType(UTF8Type, UTF8Type)' and comparator = UTF8Type and default_validation_class = UTF8Type;
数据: 行键:{TYPE-1,SUB-TYPE-1}
列:名称1:Value1

我是这样质疑的:

Cluster cluster = HFactory.getOrCreateCluster("cls1", "localhost:9160");;
Keyspace keyspace = HFactory.createKeyspace("ks1",cluster);;
Serializer se = StringSerializer.get();

Composite start = new Composite();
start.addComponent(0, "TYPE-1", ComponentEquality.EQUAL);
start.addComponent(1, "SUB-TYPE-1", ComponentEquality.EQUAL);
Composite end = new Composite();
end.addComponent(0, "TYPE-1", ComponentEquality.GREATER_THAN_EQUAL);
start.addComponent(1, "SUB-TYPE-1", ComponentEquality.GREATER_THAN_EQUAL);

SliceQuery<String, Composite, String> sliceQuery = HFactory.createSliceQuery(keyspace, se, CompositeSerializer.get(), se);;
sliceQuery.setColumnFamily("cf1");
sliceQuery.setKey("TYPE-1");
sliceQuery.setRange(start, start, false, 999);

QueryResult<ColumnSlice<Composite, String>> qr = sliceQuery.execute();
Cluster Cluster=HFactory.getOrCreateCluster(“cls1”,“localhost:9160”);;
Keyspace Keyspace=HFactory.createKeyspace(“ks1”,集群);;
Serializer se=StringSerializer.get();
复合开始=新复合();
start.addComponent(0,“TYPE-1”,ComponentEquality.EQUAL);
start.addComponent(1,“子类型-1”,ComponentEquality.EQUAL);
复合材料端=新复合材料();
end.addComponent(0,“类型-1”,ComponentEquality.大于等于);
start.addComponent(1,“子类型-1”,ComponentEquality.大于等于);
SliceQuery SliceQuery=HFactory.createSliceQuery(键空间,se,CompositeSerializer.get(),se);;
sliceQuery.setColumnFamily(“cf1”);
sliceQuery.setKey(“TYPE-1”);
sliceQuery.setRange(start,start,false,999);
QueryResult qr=sliceQuery.execute();
但下面是一个例外: me.prettyprint.hector.api.exceptions.HInvalidRequestException:invalidRequestException eption(原因:没有足够的字节读取组件0的值)


有什么帮助吗?

您的行键是CompositeType,但您正在将行键设置为“TYPE-1”。这就是为什么卡桑德拉会给你一个错误


切片查询返回给定行的列范围。您需要为行键指定组合,或者通过将子类型移动到列并使列成为组合来更改数据模型。

您的行键是CompositeType,但您正在将行键设置为“TYPE-1”。这就是为什么卡桑德拉会给你一个错误


切片查询返回给定行的列范围。您需要为行键指定一个组合,或者通过将子类型移动到列来更改数据模型,并使列成为一个组合。

我在这里对组合行键和组合列有点困惑。你能提供一些很好的链接吗?主要的区别是你可以跨列而不是跨行进行范围查询。因此,所有查询都需要知道整行键(无论是否为复合键),但不需要指定精确的列。谢谢Richard,还有一个问题。在我的例子中,我有大约100个键(或者说类型)。在每个子类型下,可以有成千上万的子类型。每个子类型都有5-6列。我应该如何为我的专栏族建模?提前感谢..我对复合行键和复合列有点困惑。你能提供一些很好的链接吗?主要的区别是你可以跨列而不是跨行进行范围查询。因此,所有查询都需要知道整行键(无论是否为复合键),但不需要指定精确的列。谢谢Richard,还有一个问题。在我的例子中,我有大约100个键(或者说类型)。在每个子类型下,可以有成千上万的子类型。每个子类型都有5-6列。我应该如何为我的专栏族建模?提前谢谢你指的是这个你指的是这个。