Cassandra 3 在删除操作时触发



我正在尝试在 Cassandra 3 上实现一个触发器,以通过实现来捕获特定表上的删除操作

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.cells()) {
if (cell.isTombstone()) {
// Cell deletion
} else {
// Insert or Update
}  
}
break;
case RANGE_TOMBSTONE_MARKER:
// Range Deletion
break;
}
}
} else {
// Partition Level Deletion
}
}

假设我们有表格:

CREATE TABLE kv (
pk int,
ck int,
d int,
PRIMARY KEY (pk, ck)
);

这里 pk 是分区键,ck 是集群键

分区级删除:

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;

最新更新