我正在尝试使用 Java 中的 thrift 插入具有复合键的列族。我得到以下异常:
InvalidRequestException(why:Not enough bytes to read value of component 0)
这是我使用 CQLSH 创建 CF 的方法。我想将 ("1","2","aaa") 插入“测试”。
CREATE COLUMFAMILY 测试 (id1 varchar, id2 varchar, value 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);
}