我在网上看到了各种使用cassandra触发器写入审计表的示例。我跟着这个: https://github.com/apache/cassandra/blob/cassandra-3.0/examples/triggers/src/org/apache/cassandra/triggers/AuditTrigger.java
但是在我的用例中,我有一个审计表,它有一个复合分区键(PRIMARY KEY((col1,col2),col3,col4))和多个聚类列。 我已经能够通过添加audit.clustering(values)来添加聚类列,但我无法弄清楚如何实现复合分区键。 如果我将update.partitionKey.partition()作为rowUpdateBuilder的第3个参数传递,RowUpdateBuilder会给出错误。
错误是: Java.lang.IllegalArgumentException:组件数量无效,期望为2但得到1。
当我将大小为2的数组作为第三个参数传递给rowUpdateBuilder时,我得到了同样的错误。
任何帮助将不胜感激。
答案 0 :(得分:0)
从所有分区键构建复合分区键
要从一个或多个分区键构建复合分区键,请使用以下方法:
public DecoratedKey buildCompositePartitionKey(CFMetaData metadata, Object... partitionKey) {
return metadata.decorateKey(
CFMetaData.serializePartitionKey(
metadata.getKeyValidatorAsClusteringComparator().make(partitionKey)
)
);
}
示例:
CFMetaData metadata = Schema.instance.getCFMetaData("test_ks", "test_cf");
DecoratedKey compositePartitionKey = buildCompositePartitionKey(metadata, "col1 value", "col2 value");
RowUpdateBuilder audit = new RowUpdateBuilder(metadata, FBUtilities.timestampMicros(), compositePartitionKey);