Java Cassandra 3.x触发器列值

Java Cassandra 3.x触发器列值,java,triggers,cassandra,Java,Triggers,Cassandra,我使用的是3.4 Cassandra触发器API,它引入了经过修改的ITrigger接口,例如: 我的问题是,如何从insert/update语句的分区对象中提取列值?如果是这样,我该怎么做 public interface ITrigger { public Collection<Mutation> augment(Partition update); } 公共接口ITrigger { 公共集合扩充(分区更新); } 一些代码片段会很有用。试试这个 public Col

我使用的是3.4 Cassandra触发器API,它引入了经过修改的ITrigger接口,例如:

我的问题是,如何从insert/update语句的分区对象中提取列值?如果是这样,我该怎么做

public interface ITrigger
{
    public Collection<Mutation> augment(Partition update);
}
公共接口ITrigger
{
公共集合扩充(分区更新);
}
一些代码片段会很有用。

试试这个

public Collection<Mutation> augment(Partition update) {
    try {
        UnfilteredRowIterator it = update.unfilteredIterator();
        while (it.hasNext()) {
            Unfiltered un = it.next();
            Clustering clt = (Clustering) un.clustering();  
            Iterator<Cell> cls = update.getRow(clt).cells().iterator();
            while(cls.hasNext()){
                Cell cell = cls.next();
                 String data = new String(cell.value().array()); // If cell type is text
            }
        }
    } catch (Exception e) {
      ...
    }
    return null;
}
公共集合扩充(分区更新){
试一试{
UnfilteredRowIterator it=update.unfilteredIterator();
while(it.hasNext()){
未过滤的un=it.next();
集群clt=(集群)un.Clustering();
迭代器cls=update.getRow(clt.cells().Iterator();
while(cls.hasNext()){
Cell Cell=cls.next();
字符串数据=新字符串(cell.value().array());//如果单元格类型为文本
}
}
}捕获(例外e){
...
}
返回null;
}
公共类HelloWorld实现ITrigger
{
私有静态最终记录器Logger=LoggerFactory.getLogger(HelloWorld.class);
公共集合扩充(分区)
{
字符串tableName=partition.metadata().cfName;
logger.info(“表:”+表名);
JSONObject obj=新的JSONObject();
put(“message_id”,partition.metadata().getKeyValidator().getString(partition.partitionKey().getKey()));
试一试{
UnfilteredRowIterator it=partition.unfilteredIterator();
while(it.hasNext()){
未过滤的un=it.next();
集群clt=(集群)un.Clustering();
迭代器单元格=partition.getRow(clt.cells().Iterator();
迭代器列=partition.getRow(clt.columns().Iterator();
while(columns.hasNext()){
ColumnDefinition columnDef=columns.next();
Cell=cells.next();
字符串数据=新字符串(cell.value().array());//如果单元格类型为文本
obj.put(columnDef.toString(),数据);
}
}
}捕获(例外e){
}
debug(obj.toString());
返回集合。emptyList();
}        
}

我将此代码用于静态列

@覆盖
公共集合扩充(分区更新){
字符串keyspaceName=update.metadata().ksName;
//对于静态柱
Row dataRow=update.getRow(Clustering.STATIC_Clustering);
对于(单元格:dataRow.cells()){
ColumnDefinition CDDefinition=cell.column();
字符串colName=cDefinition.name.toString();
ByteBuffer值=cell.value();
}
返回集合。空_列表;
}

colName和value变量是单元格的数据。

谢谢您的回答。不鼓励只使用代码的答案。请给出一些解释以便更好地理解。
public class HelloWorld implements ITrigger
{
    private static final Logger logger = LoggerFactory.getLogger(HelloWorld.class);

    public Collection<Mutation> augment(Partition partition)
    {
        String tableName = partition.metadata().cfName;
        logger.info("Table: " + tableName);

        JSONObject obj = new JSONObject();
        obj.put("message_id", partition.metadata().getKeyValidator().getString(partition.partitionKey().getKey()));

        try {
            UnfilteredRowIterator it = partition.unfilteredIterator();
            while (it.hasNext()) {
                Unfiltered un = it.next();
                Clustering clt = (Clustering) un.clustering();  
                Iterator<Cell> cells = partition.getRow(clt).cells().iterator();
                Iterator<ColumnDefinition> columns = partition.getRow(clt).columns().iterator();

                while(columns.hasNext()){
                    ColumnDefinition columnDef = columns.next();
                    Cell cell = cells.next();
                    String data = new String(cell.value().array()); // If cell type is text
                    obj.put(columnDef.toString(), data);
                }
            }
        } catch (Exception e) {

        }
        logger.debug(obj.toString());

        return Collections.emptyList();
    }        
}