我们如何在cassandra中使用rowUpdateBuilder来写入包含复合分区键的审计表?

时间:2017-06-21 05:54:06

标签: java triggers cassandra cassandra-3.0

我在网上看到了各种使用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时,我得到了同样的错误。

任何帮助将不胜感激。

1 个答案:

答案 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);