cassandra - Cassandra 触发器 - 空单元格/列
问题描述
我正在使用下面的代码来提取 cassandra 触发器中的数据。我在 cassandra 表上创建了触发器。当在表中插入新行时,将调用触发器。但是,单元格和列的大小为 0。columns.next() 返回 false。 有人可以帮忙,让我知道缺少什么吗?为什么单元格或列是空的。
我在本地使用 Apache Cassandra 3.11.3。
pom.xml:
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>3.11.3</version>
</dependency>
触发类
public class TestTrigger implements ITrigger {
private static final Logger logger = LoggerFactory.getLogger(TestTrigger.class);
public Collection<Mutation> augment(Partition partition)
{
String tableName = partition.metadata().cfName;
logger.info("Table: " + tableName);
String topicname = null;
String type = null;
String subtype = null;
String id = "0";
int value = 0;
ByteBuffer partitionKeyValues = partition.partitionKey().getKey();
id = new String (partitionKeyValues.array());
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()){
....
}
}
} catch (Exception e) {
}
return Collections.emptyList();
}
}
架构和触发器详细信息
CREATE KEYSPACE test_keyspace WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': '1'} AND durable_writes = true;
CREATE TABLE test_keyspace.test_table (
f1 text,
f2 text,
f3 int,
f4 text,
f5 text,
f6 double,
PRIMARY KEY ((f1, f2, f3), f4, f5)
) WITH CLUSTERING ORDER BY (f4 ASC, f5 ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
create trigger test_trigger ON test_keyspace.test_table USING 'com.test.TestTrigger';
插入查询
insert into test_keyspace.test_table(f1, f2, f3, f4, f5, f6) values('test1','test',1, 'test','test',null);
谢谢
解决方案
推荐阅读
- sql - 即使 Microsoft Access 中还有一条记录,我的记录集也只返回一条记录
- java - rxjava PublishSubject 第二次不订阅
- google-apps-script - 使用 If 包含类型函数根据当前行和列中的子字符串将电子邮件发送到特定地址
- windows - 如何通过 Body 过滤掉提琴手中的 POST 请求?
- javascript - 从输入字段传递数据
- r - 如何查找小标题中的哪些列是数字或字符?
- c# - Asp.net mvc 从一个类重定向到动作
- sharepoint - Sharepoint:如何在本地创建新文档?
- ios - Xamarin Firebase iOS 未收到 FCM 消息
- assembly - 了解 vpermd(或 vpermps)的优化顺序