Triggers 删除操作时的Cassandra 3触发器
我试图在Cassandra 3上实现一个触发器,通过实现Triggers 删除操作时的Cassandra 3触发器,triggers,cassandra,Triggers,Cassandra,我试图在Cassandra 3上实现一个触发器,通过实现 public Collection<Mutation> augment(Partition partition) 公共集合扩充(分区) 在ITrigger界面上,但我无法区分更新和删除操作 如何捕获该操作是删除操作?以下是如何捕获所有类型的删除 public Collection<Mutation> augment(Partition partition) { if(partition.partiti
public Collection<Mutation> augment(Partition partition)
公共集合扩充(分区)
在ITrigger
界面上,但我无法区分更新和删除操作
如何捕获该操作是删除操作?以下是如何捕获所有类型的删除
public Collection<Mutation> augment(Partition partition) {
if(partition.partitionLevelDeletion().isLive()) {
UnfilteredRowIterator it = partition.unfilteredIterator();
while (it.hasNext()) {
Unfiltered unfiltered = it.next();
switch (unfiltered.kind()) {
case ROW:
Row row = (Row) unfiltered;
if (!row.deletion().isLive()) {
// Row deletion
}
for (Cell cell : row.cell()) {
if (cell.isTombstone() {
// Cell deletion
} else {
// Insert or Update
}
}
break;
case RANGE_TOMBSTONE_MARKER:
// Range Deletion
break;
}
}
} else {
// Partition Level Deletion
}
}
这里pk是分区键,ck是集群键
分区级删除:
DELETE from kv WHERE pk = 1;
DELETE from kv WHERE pk = 1 AND ck > 10;
范围删除:
DELETE from kv WHERE pk = 1;
DELETE from kv WHERE pk = 1 AND ck > 10;
行删除:
DELETE from kv WHERE pk = 1 AND ck = 10;
和单元格删除:
DELETE d from kv WHERE pk = 1 AND ck = 10;
以下是如何捕获所有类型的删除
public Collection<Mutation> augment(Partition partition) {
if(partition.partitionLevelDeletion().isLive()) {
UnfilteredRowIterator it = partition.unfilteredIterator();
while (it.hasNext()) {
Unfiltered unfiltered = it.next();
switch (unfiltered.kind()) {
case ROW:
Row row = (Row) unfiltered;
if (!row.deletion().isLive()) {
// Row deletion
}
for (Cell cell : row.cell()) {
if (cell.isTombstone() {
// Cell deletion
} else {
// Insert or Update
}
}
break;
case RANGE_TOMBSTONE_MARKER:
// Range Deletion
break;
}
}
} else {
// Partition Level Deletion
}
}
这里pk是分区键,ck是集群键
分区级删除:
DELETE from kv WHERE pk = 1;
DELETE from kv WHERE pk = 1 AND ck > 10;
范围删除:
DELETE from kv WHERE pk = 1;
DELETE from kv WHERE pk = 1 AND ck > 10;
行删除:
DELETE from kv WHERE pk = 1 AND ck = 10;
和单元格删除:
DELETE d from kv WHERE pk = 1 AND ck = 10;
谢谢你。当我运行命令“delete from my_table where id=22”时,会调用哪一个?id是分区键?如果是,那么它将是分区级删除您的意思是在这种情况下调用else“else{//partition Level Deletion}”?更新操作中的“else”也会被调用吗?只有当它是delete时,代码
else{//Partition Level deletation}
才会首先调用Insert或update或Range或delete(当您指定集群键或null Insert时)操作,如果它将调用Ashraful。当我运行命令“delete from my_table where id=22”时,会调用哪一个?id是分区键?如果是,那么它将是分区级删除您的意思是在这种情况下调用else“else{//partition Level Deletion}”?并且“else”也会在更新操作中调用吗?只有当它是delete时,代码else{//Partition Level deletation}
才会调用Insert或update或Range或delete(当您指定集群键或null Insert时)操作,如果将调用