gpt4 book ai didi

cassandra - 使用复合键 : InvalidRequestException(why:Not enough bytes to read value of component 0) 从 Cassandra 插入和获取

转载 作者:行者123 更新时间:2023-12-02 17:48:44 24 4
gpt4 key购买 nike

我正在尝试使用 Java 中的 thrift 插入具有复合键的列族。我收到以下异常:

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

以下是我如何使用 CQLSH 创建 CF。我想将(“1”,“2”,“aaa”)插入“test”中。

CREATE COLUMNFAMILY 测试(id1 varchar,id2 varchar,值 varchar,PRIMARY KEY (id1,id2));

这是我的源代码,有人知道这里出了什么问题以及如何使其工作吗?

public static void main(String[] args) throws Exception {       

TSocket socket = new TSocket("10.10.8.200", 9160);
TFramedTransport transport = new TFramedTransport(socket);

Cassandra.Client client = new Cassandra.Client(new TBinaryProtocol(transport));
transport.open();
client.set_cql_version("3.0.0");
client.set_keyspace("bigdata");

ColumnParent parent = new ColumnParent("test");

List<AbstractType<?>> keyTypes = new ArrayList<AbstractType<?>>();
keyTypes.add(UTF8Type.instance);
keyTypes.add(UTF8Type.instance);
CompositeType compositeKey = CompositeType.getInstance(keyTypes);

Builder builder = new Builder(compositeKey);
builder.add(ByteBuffer.wrap("1".getBytes()));
builder.add(ByteBuffer.wrap("2".getBytes()));
ByteBuffer rowid = builder.build();

Column column = new Column();
column.setName("value".getBytes());
column.setValue("aaa".getBytes());
column.setTimestamp(System.currentTimeMillis());

client.insert(rowid, parent, column, ConsistencyLevel.ONE);

}

最佳答案

好的。在这里冒险。如果您希望主键按顺序由 id1 和 id2 组成,那么当您插入一行时,您将添加一列作为值,并且行键和列名称将从 id1 和 id2 的值派生。

行键将是 id1 的值。

值的列名称将是一个复合值,由 id1 的值(本例中为“1”)和列 id2 的名称(本例中为“id2”)组成。

如果您不直接使用 CQL,至少这是您必须在 Hector 中执行的操作。

关于cassandra - 使用复合键 : InvalidRequestException(why:Not enough bytes to read value of component 0) 从 Cassandra 插入和获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11801288/

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