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.