java triggers cassandra

java - Valores de la columna de activación Cassandra 3.x



triggers (3)

Prueba esto !!!

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; }

Estoy usando la API de activación Cassandra 3.4, que introdujo la interfaz ITrigger modificada, ejemplo: https://github.com/apache/cassandra/blob/trunk/examples/triggers/src/org/apache/cassandra/triggers/AuditTrigger .Java

Mi pregunta es, ¿cuál es la forma de extraer los valores de columna del objeto Partición para las instrucciones de inserción / actualización? Si es así, ¿cómo puedo hacer esto?

public interface ITrigger { public Collection<Mutation> augment(Partition update); }

Algunos fragmentos de código serían útiles.


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(); } }


Yo uso este código para columnas estáticas

@Override public Collection<Mutation> augment(Partition update) { String keyspaceName = update.metadata().ksName; //for static columns Row dataRow = update.getRow(Clustering.STATIC_CLUSTERING); for (Cell cell : dataRow.cells()) { ColumnDefinition cDefinition = cell.column(); String colName = cDefinition.name.toString(); ByteBuffer value = cell.value(); } return Collections.EMPTY_LIST; }

El colName y las variables de valor son datos de la celda.