如何将反突变转化为Cassandra ITrigger

如何将反突变转化为Cassandra ITrigger,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我使用的是Cassandra 3.10,我需要计算有多少数据修改。为了解决这个问题,我将使用cassandra触发器,但触发器工作的结果需要是突变 公共接口ITrigger{ 公共集合扩充(分区更新); } 但我有反突变 @覆盖 公共集合扩充(分区更新){ 字符串keyspaceName=update.metadata().ksName; //CFMetaData metadata=Schema.instance.getCFMetaData(keyspaceName,cfName); 长时间戳

我使用的是Cassandra 3.10,我需要计算有多少数据修改。为了解决这个问题,我将使用cassandra触发器,但触发器工作的结果需要是突变

公共接口ITrigger{
公共集合扩充(分区更新);
}
但我有反突变

@覆盖
公共集合扩充(分区更新){
字符串keyspaceName=update.metadata().ksName;
//CFMetaData metadata=Schema.instance.getCFMetaData(keyspaceName,cfName);
长时间戳=System.currentTimeMillis();
字符串cfName=“用户\产品\数量\ cf”;
CFMetaData counterCfMetadata=Schema.instance.getCFMetaData(keyspaceName,cfName);
ByteBuffer密钥=toByteBuffer(“测试用户密钥”);
PartitionUpdate.SimpleBuilder builder=PartitionUpdate.SimpleBuilder(counterCfMetadata,键);
ByteBuffer columnName=toByteBuffer(“测试计数器列”);
ByteBuffer countValue=CounterContext.instance().createLocal(1);
builder.timestamp(timestamp).row(Clustering.make(columnName)).add(“value”,value);
突变=builder.buildAsMutation();
//TODO这条线不行
//返回集合。单音列表(变异);
反突变Cmutate=新的反突变(突变,一致性水平1);
//我不明白我下一步要做什么。
//现在我使用下一行,这是工作,但我不确定这是好的做法。
返回Collections.singletonList(cMutation.applycountermutate());
}

那么如何将反突变转换为突变呢?

您可以使用
查询处理器

例如:

@Override
public Collection<Mutation> augment(Partition update) {
    String keyspaceName = update.metadata().ksName;
    String cfName = "user_product_count_cf";

    QueryProcessor.process(
            QueryBuilder.update(keyspaceName,cfName).with(incr("test-counter-column",1)).where(eq("test-user-key", bindMarker())).toString(),
            ConsistencyLevel.LOCAL_QUORUM, 
            Arrays.asList(key) // Put the partition key value here
    );

    return Collections.EMPTY_LIST;
}
@覆盖
公共集合扩充(分区更新){
字符串keyspaceName=update.metadata().ksName;
字符串cfName=“用户\产品\数量\ cf”;
QueryProcessor.process(
QueryBuilder.update(keyspaceName,cfName).with(incr(“测试计数器列”,1)).where(eq(“测试用户键”,bindMarker()).toString(),
一致性水平。当地法定人数,
Arrays.asList(key)//将分区键值放在这里
);
返回集合。空_列表;
}

我在user\u event\u cf中插入日期,并想创建count或user\u product\u count\u cf。我想我必须创建一个变量。在触发器中使用cql是一种良好的做法吗?检查系统日志Cassandra抛出了异常。我在代码中添加了一些注释,代码运行良好。是的,您是对的,我在重写元数据变量的地方丢失了行。问题解决了。