Cassandra 将SSTableImpleUseredWriter与表中的所有键列一起使用

Cassandra 将SSTableImpleUseredWriter与表中的所有键列一起使用,cassandra,Cassandra,我有一张像这样的桌子: CREATE TABLE example ( id TEXT, time TIMESTAMP, value TEXT, PRIMARY KEY (id, time, value)); 在代码中有如下内容: cmpType=CompositeType.getInstance(AsciiType.instance, TimestampType.instance, ascitype.instance); SSTABLESimpleUsertedWriter=新

我有一张像这样的桌子:

CREATE TABLE example (
  id TEXT,
  time TIMESTAMP,
  value TEXT,
  PRIMARY KEY (id, time, value));
在代码中有如下内容:

cmpType=CompositeType.getInstance(AsciiType.instance,
TimestampType.instance,
ascitype.instance);
SSTABLESimpleUsertedWriter=新的SSTABLESimpleUsertedWriter(outputDir,
新的参数(3partitioner(),键空间,表,cmpType,null,sstSize);
无效写入(字符串id、日期时间、字符串值){
长时间戳=System.currentTimeMillis()*1000;
writer.newRow(字节(id));
writer.addColumn(
cmpType.builder()
.add(TimestampType.instance.decompose(time))
.add(字节(值))
.build(),
字节(“”,时间戳);
}
但是我不知道,在这种情况下如何使用
addColumn
。当我尝试使用
sstableloader
将此类代码的结果上载到Cassandra时,我得到:

java.util.concurrent.ExecutionException: org.apache.cassandra.streaming.StreamException: Stream failed
    at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299)
    at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286)
    at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
    at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:122)
Caused by: org.apache.cassandra.streaming.StreamException: Stream failed
    at org.apache.cassandra.streaming.management.StreamEventJMXNotifier.onFailure(StreamEventJMXNotifier.java:85)
    at com.google.common.util.concurrent.Futures$4.run(Futures.java:1172)
    at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297)
    at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
    at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)
    at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:202)
    at org.apache.cassandra.streaming.StreamResultFuture.maybeComplete(StreamResultFuture.java:208)
    at org.apache.cassandra.streaming.StreamResultFuture.handleSessionComplete(StreamResultFuture.java:184)
    at org.apache.cassandra.streaming.StreamSession.closeSession(StreamSession.java:412)
    at org.apache.cassandra.streaming.StreamSession.sessionFailed(StreamSession.java:617)
    at org.apache.cassandra.streaming.StreamSession.messageReceived(StreamSession.java:472)
    at org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:256)
    at java.lang.Thread.run(Thread.java:745)

解决方案是在列中为最后一个未使用的值添加一些名称:

writer.addColumn(
        cmpType.builder()
               .add(TimestampType.instance.decompose(time))
               .add(bytes(value))
               .add(bytes("empty"))
               .build(),
        bytes(""), timestamp);