首页 > 解决方案 > 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);

谢谢

标签: cassandra

解决方案


推荐阅读