Java Cassandra 3.x触发器列值
我使用的是3.4 Cassandra触发器API,它引入了经过修改的ITrigger接口,例如: 我的问题是,如何从insert/update语句的分区对象中提取列值?如果是这样,我该怎么做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
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();
}
}